mybatis与spring整合

来源:互联网 发布:淘宝banner尺寸大小 编辑:程序博客网 时间:2024/05/18 15:28

mybatis与spring整合

导包

首先导入mybatis和spring所需要的jar包
这里写图片描述

spring配置文件

配置spring配置文件
这里写图片描述

测试一下是否配置成功:
这里写图片描述

编写实体类User

public class User {    private String id;    private String userName;    private String address;    public String getId() {        System.out.println("正在通过getId方法获取id的值:" + id);        return id;    }    public void setId(String id) {        System.out.println("正在通过setId方法注入id的值:" + id);        this.id = id;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        System.out.println("正在通过setAddress方法注入address的值:" + address);        this.address = address;    }    @Override    public String toString() {        return "{id:" + id + ",name:" + userName + ",address:" + address + "}";    }    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        System.out.println("正在通过setUserName方法注入userName的值:" + userName);        this.userName = userName;    }}

编写映射文件User.xml

这里写图片描述

<?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="com.cc.mybatis.domain.User">    <resultMap type="User" id="userMap">        <id column="id" property="id"/>        <result column="name" property="userName"/>        <result column="address" property="address"/>    </resultMap>    <sql id="mysql">        id,name,address    </sql>    <!-- 根据id查询User -->    <!-- id:当前sql语句的唯一标示  parameterType:参数类型 resultType:结果类型(返回值类型)-->    <select id="selectUserById" parameterType="string" resultMap="userMap">        select <include refid="mysql"/> from user where id = #{userid}    </select>    <!-- 查询所有User -->    <select id="selectAllUsers" resultType="User">        select id,name as userName ,address from user    </select>    <!-- 根据id查询User,返回值为:Map -->    <select id="selectUserByIdForMap" parameterType="string" resultType="hashmap">        select id,name,address from user where id = #{userid}    </select>    <!-- 动态sql -->    <select id="selectUserByCondition" parameterType="User" resultType="User">        select id,name as userName ,address from user where 1=1        <if test="id != null">            and id = #{id}        </if>        <!-- userName指的是实体的属性 -->        <if test="userName != null">            and name = #{userName}        </if>        <if test="address != null">            and address = #{address}        </if>    </select>    <!-- 动态sql -->    <select id="selectUserByCondition2" parameterType="User" resultType="User">        select id,name as userName ,address from user        <where>            <if test="id != null">               id = #{id}            </if>            <!-- userName指的是实体的属性 -->            <if test="userName != null">                and name = #{userName}            </if>            <if test="address != null">                and address = #{address}            </if>        </where>    </select>    <!-- 插入User -->    <insert id="insertUser" parameterType="User">        insert into user (id,name,address) values (#{id},#{userName},#{address});    </insert>    <!-- 插入User 参数为hashmap-->    <insert id="insertUserForMap" parameterType="hashmap">        insert into user (id,name,address) values (#{id},#{name},#{address});    </insert>    <!-- 根据id删除User -->    <delete id="deleteUserById" parameterType="string">        delete from user where id = #{id}    </delete>    <!-- 根据id更新User -->    <update id="updateUserById" parameterType="User">        update user set name = #{userName},address = #{address} where id = #{id}    </update>    <!-- 动态更新user -->    <update id="updateUserByCondition" parameterType="User">        update user         <set>            <if test="userName != null">                name = #{userName},            </if>            <if test="address != null">                address = #{address}            </if>        </set>        where id = #{id}    </update>    <!-- 根据id更新User 参数为map-->    <update id="updateUserByIdForMap" parameterType="hashmap">        update user set name = #{userName},address = #{address} where id = #{id}    </update></mapper>

加入映射文件

这里写图片描述

spring中引入mybatis的配置文件

这里写图片描述

上面加入的映射文件也可以不在sqlMapConfig.xml中书写,可以写在spring的配置文件中,如下:
这里写图片描述

加入Dao层和Service层实体类

这里写图片描述

这里写图片描述

public interface IUserDao {    public User findUserById(String id);    public List<User> findAllUser();    public List<User> findUserByCondition(User u);    public int deleteUserById(String id);    public int saveUser(User u);    public int updateUserById(User u);    public int updateUser(User u);}
public class UserDaoImpl extends SqlSessionDaoSupport implements IUserDao {    public User findUserById(String id) {        return (User) this.getSqlSession().selectOne("com.cc.mybatis.domain.User.selectUserById", id);    }    public int deleteUserById(String id) {        int i = this.getSqlSession().delete("com.cc.mybatis.domain.User.deleteUserById", id);        return i;    }    public List<User> findAllUser() {        return this.getSqlSession().selectList("com.cc.mybatis.domain.User.selectAllUsers");    }    public List<User> findUserByCondition(User u) {        return this.getSqlSession().selectList("com.cc.mybatis.domain.User.selectUserByCondition", u);    }    public int saveUser(User u) {        int i = this.getSqlSession().insert("com.cc.mybatis.domain.User.insertUser", u);        return i;    }    public int updateUserById(User u) {        int i = this.getSqlSession().update("com.cc.mybatis.domain.User.updateUserById", u);        return i;    }    public int updateUser(User u) {        int i = this.getSqlSession().update("com.cc.mybatis.domain.User.updateUserByCondition", u);        return i;    }}
public interface IUserService {    public User findUserById(String id);    public List<User> findAllUser();    public List<User> findUserByCondition(User u);    public int deleteUserById(String id);    public int saveUser(User u);    public int updateUserById(User u);    public int updateUser(User u);}
public class UserServiceImpl implements IUserService {    private IUserDao userDao;    public int deleteUserById(String id) {        int i = userDao.deleteUserById(id);        //int c = 1 / 0;        return i;    }    public List<User> findAllUser() {        return userDao.findAllUser();    }    public List<User> findUserByCondition(User u) {        return userDao.findUserByCondition(u);    }    public User findUserById(String id) {        return userDao.findUserById(id);    }    public int saveUser(User u) {        return userDao.saveUser(u);    }    public int updateUser(User u) {        return userDao.updateUser(u);    }    public int updateUserById(User u) {        return userDao.updateUserById(u);    }    public void setUserDao(IUserDao userDao) {        this.userDao = userDao;    }}

在spring配置中注入dao和service

这里写图片描述

测试

这里写图片描述

测试成功,表示mybatis和spring已经成功整合了。

通过springAOP加入事务

这里写图片描述

故意出错:
这里写图片描述

测试结果:
这里写图片描述

这里写图片描述

数据依然存在,说明事务也已经配置成功了。

测试代码如下:

public class MyBatisTest {    @Test    public void test1(){        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");        IUserDao userDao = (IUserDao) ctx.getBean("userDao");        User u = userDao.findUserById("1");        System.out.println(u);    }    @Test    public void test2(){        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");        IUserDao userDao = (IUserDao) ctx.getBean("userDao");        List<User> users = userDao.findAllUser();        for(User u: users){            System.out.println(u);        }    }    @Test    public void test3(){        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");        IUserDao userDao = (IUserDao) ctx.getBean("userDao");        User user = new User();        user.setId("0002");        user.setUserName("lisi");        user.setAddress("beijing");        List<User> users = userDao.findUserByCondition(user);        for(User u: users){            System.out.println(u);        }    }    @Test    public void test4(){        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");        IUserDao userDao = (IUserDao) ctx.getBean("userDao");        int i = userDao.deleteUserById("0002");        System.out.println(i);    }    @Test    public void test5(){        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");        IUserDao userDao = (IUserDao) ctx.getBean("userDao");        User user = new User();        user.setId("0002");        user.setUserName("lisi");        user.setAddress("beijing");        int i = userDao.saveUser(user);        System.out.println(i);    }    @Test    public void test6(){        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");        IUserDao userDao = (IUserDao) ctx.getBean("userDao");        User user = new User();        user.setId("0003");        user.setUserName("zhangsan");        //user.setAddress("nanjing");        int i = userDao.updateUserById(user);        System.out.println(i);    }    @Test    public void test7(){        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");        IUserDao userDao = (IUserDao) ctx.getBean("userDao");        User user = new User();        user.setId("0004");        //user.setUserName("jack");        //user.setAddress("beijing");        int i = userDao.updateUser(user);        System.out.println(i);    }    @Test    public void test8(){        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");        IUserService userService = (IUserService) ctx.getBean("userService");        int i = userService.deleteUserById("1");        System.out.println(i);    }}
0 0
原创粉丝点击