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
- Mybatis笔记之四 -- mybatis与spring整合简单例子
- spring 与 mybatis 整合笔记
- spring、mybatis、mvc 整合简单例子
- Spring+Mybatis 整合例子
- spring与mybatis四种整合方法
- spring与mybatis四种整合方法
- spring与mybatis四种整合方法
- spring与mybatis四种整合方法
- spring与mybatis四种整合方法
- Mybatis使用篇之四:整合Spring
- Mybatis使用篇之四:整合Spring
- Mybatis使用篇之四:整合Spring
- Mybatis学习笔记(四)——MyBatis整合spring
- Mybatis入门学习四:Spring 与 MyBatis整合
- 简单配置spring+springmvc+mybatis之整合
- mybatis-spring整合笔记
- mybatis例子及mybatis和spring整合
- DB2+MyBatis+spring整合例子
- Java容器学习之Map
- gcc/g++ 静态动态库 混链接.
- mac 安装jdk和eclipse环境
- 使用Maven为一个项目生成多个Jar包
- UVA 10608并查集
- Mybatis笔记之四 -- mybatis与spring整合简单例子
- 制作个人开发IDE
- Linux GCC常用命令
- 与数据库oracle进行连接
- CodeForces 237C 筛素数+二分
- 南阳113 这没错误吧,明天 再提交,网速不给力
- Hibernate的检索方式
- hdoj 1040 As Easy As A+B
- 字符串KMPCode