MyBatis详解:spring和mybatis整合

3.6、编写dao(包括dao接口及其实现类)


dao接口:

package cn.itcast.ssm.dao;

import java.util.List;

import cn.itcast.ssm.po.User;

public interface UserDao {

//根据id查询用户信息

public User findUserById(int id) throws Exception;

}

dao实现类:dao实现类需要继承SqlSessionDaoSupport

在实现类中,通过this.getSqlSession()方法获得SqlSession

有人可能存在疑问:实现类中连SqlSessionFactory都没有,怎么就直接得到SqlSession了?事实上,dao实现类的bean是交给spring来管理的,我们在spring的IOC容器中配置dao实现类的bean时已经向里面注入SqlSessoinFactory了(见下文)。

package cn.itcast.ssm.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.mybatis.spring.support.SqlSessionDaoSupport;

import cn.itcast.ssm.po.User;

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {

@Override

public User findUserById(int id) throws Exception {

//继承SqlSessionDaoSupport,通过this.getSqlSession()得到sqlSession

SqlSession sqlSession = this.getSqlSession();

User user = sqlSession.selectOne(“test.findUserById”, id);

return user;

}

}

3.7、在applicationContext.xml文件中配置dao实现类的bean


3.8、编写测试程序


package cn.itcast.ssm.dao;

import static org.junit.Assert.*;

import org.junit.Before;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.itcast.ssm.po.User;

public class UserDaoImplTest {

private ApplicationContext applicationContext;

//在setUp这个方法得到spring容器

@Before

public void setUp() throws Exception {

applicationContext = new ClassPathXmlApplicationContext(“classpath:spring/applicationContext.xml”);

}

@Test

public void testFindUserById() throws Exception {

UserDao userDao = (UserDao) applicationContext.getBean(“userDao”);

//调用userDao的方法

User user = userDao.findUserById(1);

System.out.println(user);

}

}

3.9、mybatis和spring整合之后原始dao开发总结


相比于mybatis和spring整合之前,mybatis和spring整合之后原始dao开发把原来在mybatis配置文件SqlMapConfig.xml中完成的连接数据源、事务控制都交给spring来完成。同时spring还配置了SqlSessionFactory的bean(不需要单例模式去造了)、配置了dao实现类的bean(不需要new了)。

步骤如下:

1、导入所需要的jar包

2、将数据库的driver、url、user、password等信息封装在db.properties

3、建立mybatis的xml文件SqlMapConfig.xml,完成别名定义、缓存设置等配置

4、建立spring的配置文件applicationContext.xml,配置数据源、SqlSessionFactory和控制事务

5、建立操作数据库表格时所对应的po类,查询的列构成po类的属性

6、编写po类的映射文件,在其中编写sql语句

7、在mybatis的xml文件SqlMapConfig.xml中加载po类的映射文件

8、编写dao接口,并在其中编写po类xml映射文件中sql语句对应的抽象方法,编写dao接口的实现类,dao实现类需要继承SqlSessionDaoSupport

**9、**在applicationContext.xml文件中配置dao实现类的bean

10、编写测试程序

四、spring和mybatis整合后mapper代理开发

=============================

4.1、编写mapper接口对应的映射文件mapper.xml


<?xml version="1.0" encoding="UTF-8" ?>

SELECT * FROM USER WHERE id = #{id}

4.2、编写mapper接口mapper.java


package cn.itcast.ssm.mapper;

import java.util.List;

import cn.itcast.ssm.po.User;

/*

  • 开发规范:

1、在mapper.xml中namespace等于mapper接口地址

2、mapper.java接口中的方法名和mapper.xml中statement的id一致

3、mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致。

4、mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。

*/

public interface UserMapper {

//根据id查询用户信息

public User findUserById(int id) throws Exception;

}

4.3、在spring的配置文件applicationContext.xml中配置代理对象的bean


这里有两种方法,一种是MapperFactoryBean配置单个代理对象的bean,另一种是mapper批量扫描,即从mapper包中扫描出mapper接口,自动创建代理对象并且在spring容器中注册 。推荐使用后者。这两种方法在配置代理对象的bean时都要注入SqlSessionFactory。

4.3.1、MapperFactoryBean配置单个代理对象的bean

mapperInterface指定mapper接口

4.3.2、mapper批量扫描

4.4、测试程序


package cn.itcast.ssm.mapper;

import static org.junit.Assert.*;

import org.junit.Before;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.itcast.ssm.po.User;

public class UserMapperTest {

private ApplicationContext applicationContext;

//在setUp这个方法得到spring容器

@Before

public void setUp() throws Exception {

applicationContext = new ClassPathXmlApplicationContext(“classpath:spring/applicationContext.xml”);

}

@Test

public void testFindUserById() throws Exception {

UserMapper userMapper=(UserMapper) applicationContext.getBean(“userMapper”);

User user=userMapper.findUserById(1);

System.out.println(user);

}

}

4.5、mybatis和spring整合之后mapper代理开发总结


和整合之后的dao开发一致,mybatis把一些事交给spring来完成。mybatis和spring整合之后mapper代理开发把原来在mybatis配置文件SqlMapConfig.xml中完成的连接数据源、事务控制都交给spring来完成。同时spring还配置了SqlSessionFactory的bean(不需要单例模式去造了)、原来在mybatis配置文件批量扫描的mapper包也交给spring来扫描。

步骤如下:

1、导入所需要的jar包

2、将数据库的driver、url、user、password等信息封装在db.properties

3、建立mybatis的xml文件SqlMapConfig.xml,完成别名定义、缓存设置等配置

4、建立spring的配置文件applicationContext.xml,配置数据源、SqlSessionFactory和控制事务

5、建立操作数据库表格时所对应的po类,查询的列构成po类的属性

6、编写mapper接口对应的映射文件mapper.xml,在其中完成sql语句的编写

注意:(1)需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中

(2)在mapper.xml中namespace等于mapper接口地址

7、编写mapper接口mapper.java,在其中编写mapper.xml文件中对应的sql语句的抽象方法

注意:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

经过日积月累, 以下是小编归纳整理的深入了解Java虚拟机文档,希望可以帮助大家过关斩将顺利通过面试。
由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。







由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
72faed303032d36.jpg" alt=“img” style=“zoom: 33%;” />

最后

经过日积月累, 以下是小编归纳整理的深入了解Java虚拟机文档,希望可以帮助大家过关斩将顺利通过面试。
由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。

[外链图片转存中…(img-YusjVAkZ-1712175218762)]
[外链图片转存中…(img-yDogQCaK-1712175218762)]
[外链图片转存中…(img-68uPVBbp-1712175218763)]
[外链图片转存中…(img-Q0AgrGpu-1712175218763)]
[外链图片转存中…(img-fL9TW4Z0-1712175218763)]
[外链图片转存中…(img-MvxeNHG8-1712175218763)]
[外链图片转存中…(img-A037d3H1-1712175218763)]

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值