Mybatis笔记之四 -- mybatis与spring整合简单例子

来源:互联网 发布:js模块化规范 编辑:程序博客网 时间:2024/06/05 17:25
1、导入开发所需要的jar包

2、配置spring配置文件beans.xml

配置数据源,bean等信息

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd         http://www.springframework.org/schema/context         http://www.springframework.org/schema/context/spring-context-3.0.xsd         http://www.springframework.org/schema/tx         http://www.springframework.org/schema/tx/spring-tx-3.0.xsd         http://www.springframework.org/schema/aop          http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"><!-- 配置数据源 --><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/test" /><property name="username" value="root" /><property name="password" value="root" /></bean><bean id="sf" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><!--  将mybatis的配置文件引入  --><property name="configLocation" value="classpath:sqlMapConfig.xml"/><property name="mapperLocations">//mybatis的映射文件导入,则不需要再sqlMapConfig.xml中在导入<value>classpath:cn/mybatis/domain/User.xml</value></property></bean><bean id="userDao" class="cn.mybatis.dao.UserDaoImpl"><property name="sqlSessionFactory" ref="sf"></property></bean><!-- ================================事务相关控制=================================================    --><bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><tx:advice id="userTxAdvice" transaction-manager="transactionManager"><tx:attributes><!-- 有事务就不用开启事务,没有就单独开启事务 --><tx:method name="delete*" propagation="REQUIRED" />  <tx:method name="insert*" propagation="REQUIRED" /><tx:method name="update*" propagation="REQUIRED" /><tx:method name="find*" read-only="true" /><tx:method name="get*" read-only="true" /><tx:method name="select*" read-only="true" /></tx:attributes></tx:advice><aop:config><aop:pointcut id="pc" expression="execution(* cn.mybatis.service.*.*(..))" /><!--把事务控制在Service层--><aop:advisor pointcut-ref="pc" advice-ref="userTxAdvice" /></aop:config><bean id="userService" class="cn.mybatis.service.UserServiceImpl"><property name="userDao" ref="userDao"></property></bean></beans>
3、配置mybatis的配置文件sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><typeAliases><typeAlias type="cn.mybatis.domain.User" alias="User"/></typeAliases><mappers><mapper resource="cn/mybatis/domain/User.xml"/></mappers></configuration>

4、实体类与映射文件user.xml

package cn.mybatis.domain;public class User {private String id;private String name;private String address;public String getId() {return id;}public void setId(String id) {System.out.println("利用set方法设置id");this.id = id;}public String getName() {System.out.println("调用get方法获取Name");return name;}public void setName(String name) {System.out.println("利用set方法设置name");this.name = name;}public String getAddress() {System.out.println("调用get方法获取Address");return address;}public void setAddress(String address) {System.out.println("利用set方法设置ddres");this.address = address;}@Overridepublic String toString() {return "id = "+id+"name = "+ name +" address" + address;}}
映射文件
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="cn.mybatis.domain.User"><!-- 根据id查询 user--><select id="selectUserById" parameterType="string" resultType="cn.mybatis.domain.User">select * from user where id = #{id}<!--  #{id} 中的参数可以随便写,因为是传进来的,在这里起到的是占位的作用--></select><!-- 查询所有的user --><select id="selectAllUser" resultType="cn.mybatis.domain.User">select id,name,address from user</select><!-- 根据id查询 user--><select id="serlectUserByIdForMap" parameterType="string" resultType="hashmap">select id,name,address from user where id = #{id}</select><!-- 插入User 参数为hashmap--><insert id="inserUserForMap" parameterType="hashmap">insert into user(id,name,address) values(#{id},#{name},#{address})</insert><!-- 插入user --><insert id="insertUser" parameterType="cn.mybatis.domain.User">insert into user(id,name,address) values(#{id},#{name},#{address})<!-- 其中vlaues(#{id},#{name},#{address}中的参数不可以随便写,必须有对应的get方法,因为是通过反射注入进来的 --></insert><!-- 根据id删除user --><delete id="deleteUserById" parameterType="string">delete from user where id = #{id}</delete><!-- 根据id更新user --><update id="updateUserById" parameterType="cn.mybatis.domain.User">update user set name = #{name}, address = #{address} where id =  #{id}</update><!-- 根据id更新user 更新参数为Map--><update id="updateUserByIdForMap" parameterType="hashmap">update user set name = #{name}, address = #{address} where id =  #{id}</update><!-- 动态sql --><select id="selectUserByCondition" parameterType="cn.mybatis.domain.User" resultType="cn.mybatis.domain.User">select id,name,address from user where 1=1<if test="id != null">and id = #{id}</if><!-- userName指的是实体的属性 --><if test="name != null">and name = #{name}</if><if test="address != null">and address = #{address}</if></select><!-- 动态sql --><select id="selectUserByCondition2" parameterType="cn.mybatis.domain.User" resultType="cn.mybatis.domain.User">select id,name,address from user<where><if test="id != null">   id = #{id}</if><!-- userName指的是实体的属性 --><if test="name != null">and name = #{name}</if><if test="address != null">and address = #{address}</if></where></select><!-- 动态更新user --><update id="updateUserByCondition" parameterType="User">update user <set><if test="name != null">name = #{name},</if><if test="address != null">address = #{address}</if></set>where id = #{id}</update></mapper>


 

5、dao层

package cn.mybatis.dao;import java.util.List;import cn.mybatis.domain.User;public interface UserDao {//根据id查询Userpublic User findUserById(String id);//查询所有Userpublic List<User> findAllUser();//动态sql查询Userpublic List<User> findUserByIdCondition(User user);//根据id删除Userpublic int deleteUserById(String id);//添加Userpublic int insertUser(User user);//更新Userpublic int updateUserById(User user);public int updateUser(User user);}

dao实现

package cn.mybatis.dao.impl;import java.util.List;import org.mybatis.spring.support.SqlSessionDaoSupport;import cn.mybatis.domain.User;public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{//根据id查询User@Overridepublic User findUserById(String id) {return (User) this.getSqlSession().selectOne("cn.mybatis.domain.User.selectUserById", id);}//根据id删除User@Overridepublic int deleteUserById(String id) {int i = this.getSqlSession().delete("cn.mybatis.domain.User.deleteUserById", id);return i;}//查询所有User@Overridepublic List<User> findAllUser() {return this.getSqlSession().selectList("cn.mybatis.domain.User.selectAllUser");}//动态sql查询所有User@Overridepublic List<User> findUserByIdCondition(User user) {return this.getSqlSession().selectList("cn.mybatis.domain.User.selectUserByCondition", user);}//添加User@Overridepublic int insertUser(User user) {return this.getSqlSession().insert("cn.mybatis.domain.User.insertUser", user);}//更新User@Overridepublic int updateUser(User user) {int i = this.getSqlSession().update("cn.mybatis.domain.User.updateUserByCondition", user);return i;}@Overridepublic int updateUserById(User user) {int i = this.getSqlSession().update("cn.mybatis.domain.User.updateUserById", user);return i;}}

6、业务层service

一般方法都与dao层相对应

package cn.mybatis.service;import java.util.List;import cn.mybatis.domain.User;public interface UserService {//根据id查询Userpublic User findUserById(String id);//查询所有Userpublic List<User> findAllUser();//动态sql查询Userpublic List<User> findUserByIdCondition(User user);//根据id删除Userpublic int deleteUserById(String id);//添加Userpublic int insertUser(User user);//更新Userpublic int updateUserById(User user);public int updateUser(User user);}

实现

package cn.mybatis.service;import java.util.List;import cn.mybatis.dao.UserDao;import cn.mybatis.domain.User;public class UserServiceImpl implements UserService {private UserDao userDao;public void setUserDao(UserDao userDao) {this.userDao = userDao;}@Overridepublic int deleteUserById(String id) {int i = userDao.deleteUserById(id);return i;}@Overridepublic List<User> findAllUser() {return userDao.findAllUser();}@Overridepublic User findUserById(String id) {return userDao.findUserById(id);}@Overridepublic List<User> findUserByIdCondition(User user) {return userDao.findUserByIdCondition(user);}@Overridepublic int insertUser(User user) {int i = userDao.insertUser(user);return i;}@Overridepublic int updateUser(User user) {int i = userDao.updateUser(user);return i;}@Overridepublic int updateUserById(User user) {int i = userDao.updateUserById(user);return i;}}


7、利用单元测试进行测试

package cn.mybatis.test;import java.util.List;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.mybatis.dao.UserDao.impl;import cn.itcast.mybatis.domain.User;import cn.itcast.mybatis.service.UserService.impl;public class MyBatisTest {@Testpublic void findUserByIdTest()throws Exception{//加载配置文件ApplicationContext ct = new ClassPathXmlApplicationContext("beans.xml");UserDao userDao = (UserDao) ct.getBean("userDao");User u = userDao.findUserById("001");System.out.println(u);}//根据id删除User@Testpublic void deleteUserByIdTest()throws Exception{ApplicationContext ct = new ClassPathXmlApplicationContext("beans.xml");UserDao userDao = (UserDao) ct.getBean("userDao");int i = userDao.deleteUserById("04");System.out.println("影响的条数: " + i);}//查询所有User@Testpublic void findAllUserTest()throws Exception{ApplicationContext ct = new ClassPathXmlApplicationContext("beans.xml");UserDao userDao = (UserDao) ct.getBean("userDao");//查询出所有的User返回的为list集合List<User> usersList = userDao.findAllUser();for(User user: usersList){System.out.println(user);}}//动态sql查询所有User@Testpublic void selectUserByConditionTest()throws Exception{ApplicationContext ct = new ClassPathXmlApplicationContext("beans.xml");UserDao userDao = (UserDao) ct.getBean("userDao");User user = new User();user.setId("002");List<User> userList = userDao.findUserByIdCondition(user);for(User u:userList){System.out.println(u);}}//添加User@Testpublic void insertUserTest()throws Exception{ApplicationContext ct = new ClassPathXmlApplicationContext("beans.xml");UserDao userDao = (UserDao) ct.getBean("userDao");User user = new User();user.setId("007");user.setName("测试007");user.setAddress("测试地址007");int i = userDao.insertUser(user);System.out.println("影响的条数: " + i);}//更新User@Testpublic void updateUserByIdTest()throws Exception{ApplicationContext ct = new ClassPathXmlApplicationContext("beans.xml");UserDao userDao = (UserDao) ct.getBean("userDao");User user = new User();user.setId("01");user.setName("更新后的001");user.setAddress("更新后的001地址");int i = userDao.updateUserById(user);System.out.println("影响的条数: " + i);}@Testpublic void updateUserByIdForMapTest()throws Exception{ApplicationContext ct = new ClassPathXmlApplicationContext("beans.xml");UserDao userDao = (UserDao) ct.getBean("userDao");User user = new User();user.setId("03");user.setName("更新后的000");user.setAddress("更新后的地址000");int i = userDao.updateUser(user);System.out.println("影响的条数: " + i);}@Testpublic void transactionTest(){ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");UserService userService = (UserService) ctx.getBean("userService");int i = userService.deleteUserById("001");System.out.println("影响的条数: " + i);}

数据库表结构:



 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝未满十八岁限制购买物品怎么办 网上飞机订票手机号填写错了怎么办 室外回填土都是砂土压不实怎么办 王牌车新车储气筒漏气查不到怎么办 顺丰快递保价后商品出现问题怎么办 未保价快递丢失没有价值证明怎么办 安卓手机谷歌地图怎么用不了怎么办 ae模板版本太高打不开怎么办 苹果手机高德地图信号弱怎么办 网上订好火车票后没赶上火车怎么办 丰巢快递柜没收到短信怎么办 被不同号码骚扰电话打个不停怎么办 手机注册被骚扰电话打个不停怎么办 网贷不停的打骚扰电话怎么办 发改委的可研报告过期了怎么办 买到没有预售证的房子怎么办 网上买的学生票取不出来怎么办 买完学生票发现打折没次数了怎么办 动车晚点方向来反了怎么办 身份证购买高铁票过不了审核怎么办 手机购买高铁票身份核验失败怎么办 在高铁上如果有人占了座位该怎么办 网上买的高铁票改签怎么办 临沂村委会强行征收我的土地怎么办 学籍验证码连续输入三次错误怎么办 社保在上海个税在外地居转户怎么办 父母已经有英国签证孩子的怎么办 营运车辆被撞不肯赔务工费怎么办 欧米茄外壳上装表带的孔穿了怎么办 淘宝上买了电子产品坏了怎么办 研究生人才补助申请期限过了怎么办 一个小孩亲妈愿意养躲起来怎么办 网银转账名字打错了怎么办 百世快递邮东西到长春件丢失怎么办 三色吸顶灯有一色不亮了怎么办 超级试驾车超出取车行政区域怎么办 护士电子化注册激活码搞丢了怎么办 香港地铁地铁错买了特惠票怎么办 湖北软考证书领取没有准考证怎么办 哈罗单车电动车骑着没电了怎么办 招聘线上测评的通行证过期了怎么办