mybatis与spring整合

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 mapper
PUBLIC "-//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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值