Mybatis笔记之四 -- mybatis与spring整合简单例子
2014-07-28 00:05
567 查看
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 configuration PUBLIC "-//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; } @Override public String toString() { return "id = "+id+"name = "+ name +" address" + address; } }
映射文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//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查询User public User findUserById(String id); //查询所有User public List<User> findAllUser(); //动态sql查询User public List<User> findUserByIdCondition(User user); //根据id删除User public int deleteUserById(String id); //添加User public int insertUser(User user); //更新User public 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 @Override public User findUserById(String id) { return (User) this.getSqlSession().selectOne("cn.mybatis.domain.User.selectUserById", id); } //根据id删除User @Override public int deleteUserById(String id) { int i = this.getSqlSession().delete("cn.mybatis.domain.User.deleteUserById", id); return i; } //查询所有User @Override public List<User> findAllUser() { return this.getSqlSession().selectList("cn.mybatis.domain.User.selectAllUser"); } //动态sql查询所有User @Override public List<User> findUserByIdCondition(User user) { return this.getSqlSession().selectList("cn.mybatis.domain.User.selectUserByCondition", user); } //添加User @Override public int insertUser(User user) { return this.getSqlSession().insert("cn.mybatis.domain.User.insertUser", user); } //更新User @Override public int updateUser(User user) { int i = this.getSqlSession().update("cn.mybatis.domain.User.updateUserByCondition", user); return i; } @Override public 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查询User public User findUserById(String id); //查询所有User public List<User> findAllUser(); //动态sql查询User public List<User> findUserByIdCondition(User user); //根据id删除User public int deleteUserById(String id); //添加User public int insertUser(User user); //更新User public 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; } @Override public int deleteUserById(String id) { int i = userDao.deleteUserById(id); return i; } @Override public List<User> findAllUser() { return userDao.findAllUser(); } @Override public User findUserById(String id) { return userDao.findUserById(id); } @Override public List<User> findUserByIdCondition(User user) { return userDao.findUserByIdCondition(user); } @Override public int insertUser(User user) { int i = userDao.insertUser(user); return i; } @Override public int updateUser(User user) { int i = userDao.updateUser(user); return i; } @Override public 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 { @Test public 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 @Test public 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 @Test public 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 @Test public 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 @Test public 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 @Test public 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); } @Test public 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); } @Test public void transactionTest(){ ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); UserService userService = (UserService) ctx.getBean("userService"); int i = userService.deleteUserById("001"); System.out.println("影响的条数: " + i); }
数据库表结构:
相关文章推荐
- spring mvc + mybatis + mysql 整合的一个简单的登录例子
- spring、mybatis、mvc 整合简单例子
- Spring-MyBatis整合简单例子及个人的经验杂谈
- springboot整合mybatis最简单的例子
- Spring+SpringMVC+Mybatis框架整合例子(SSM) 学习笔记
- MyBatis+Spring+Maven的简单整合Demo
- Struts2 + Spring 整合简单例子(转)
- 基于Spring-SpringMVC-Mybatis的简单例子
- WebService简单例子--cxf整合spring
- Eclipse + MyEclipse整合Struts+Spring+Hibernate简单例子开发
- spring、springmvc、mybatis整合笔记
- ZK(7.0.1)+Spring(2.3.2)+MyBatis(2.3.2)整合的简单示例
- Spring3.1 和 MyBatis 整合笔记
- MyBatis学习笔记(十二)spring与Mybatis整合事务
- 用cfx做webservice的简单例子,还有和spring的整合
- myBatis学习笔记(9)——spring整合mybatis
- 关于spring 与rmi整合简单例子详解
- SpringMVC+Spring+MyBatis整合笔记
- spring整合mybatis(入门级简单教程1)--在spring中配置c3p0,并成功测试
- 2009-04-07技术学习:wicket+Spring简单整合小例子