写点什么

MyBatis 详解:spring 和 mybatis 整合,linux 视频格式转换

作者:Java高工P7
  • 2021 年 11 月 10 日
  • 本文字数:4293 字

    阅读完需:约 14 分钟

<property name="username" value="${jdbc.username}" />


<property name="password" value="${jdbc.password}" />


<property name="maxActive" value="10" />


<property name="maxIdle" value="5" />


</bean>


<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">


<property name="configLocation" value="mybatis/SqlMapConfig.xml" />


<property name="dataSource" ref="dataSource" />


</bean>


注意:在配置 sqlSessionFactory 时,需要加载 mybatis 的配置文件 和指明数据源


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




这里我们仍然选择 User.java 来测试,同 mybatis 和 spring 整合之前。参照MyBatis详解(一):入门程序MyBatis详解(二):mybatis开发dao


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




<?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">


<!-- namespace 命名空间,作用就是对 sql 进行分类华管理,理解为 sql 隔离


注意:如果使用 mapper 代理方法开发,namespace 有特殊重要的作用


-->


<mapper namespace="test">


<!-- 通过 select 执行数据库查询


id:标识 映射文件中的 sql


将 sql 语句封装到 mappedStatement 对象中,所以将 id 称为 statement 的 id


parameterType:指定输入 参数的类型,这里指定 int 型


#{}表示一个占位符号


#{id}:其中的 id 表示接收输入 的参数,参数名称就是 id,如果输入 参数是简单类型,#{}中的参数名可以任意,可以 value 或其它名称


resultType:指定 sql 输出结果 的所映射的 java 对象类型,select 指定 resultType 表示将单条记录映射成的 java 对象。


-->


<select id="findUserById" parameterType="int" resultType="cn.itcast.ssm.po.User">


SELECT * FROM USER WHERE id = #{id}


</select>


</mapper>


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




<mappers>


<mapper resource="sqlmap/User.xml"/>


<!--


和 spring 整合后,使用 mapper 扫描器,这里不需要配置了


-->


</mappers>


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




<bean id="userDao" class="cn.itcast.ssm.dao.UserDaoImpl">


<property name="sqlSessionFactory" ref="sqlSessionFactory"/>


</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" ?>


<!DOCTYPE mapper


PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"


"http://mybatis.org/dtd/mybatis-3-mapper.dtd">


<!-- namespace 命名空间,作用就是对 sql 进行分类华管理,理解为 sql 隔离


注意:如果使用 mapper 代理方法开发,namespace 有特殊重要的作用,namespace 等于 mapper 接口地址


-->


<mapper namespace="cn.itcast.ssm.mapper.UserMapper">


<!-- 通过 select 执行数据库查询


id:标识 映射文件中的 sql


将 sql 语句封装到 mappedStatement 对象中,所以将 id 称为 statement 的 id


parameterType:指定输入 参数的类型,这里指定 int 型


#{}表示一个占位符号


#{id}:其中的 id 表示接收输入 的参数,参数名称就是 id,如果输入 参数是简单类型,#{}中的参数名可以任意,可以 value 或其它名称


resultType:指定 sql 输出结果 的所映射的 java 对象类型,select 指定 resultType 表示将单条记录映射成的 java 对象。


-->


<select id="findUserById" parameterType="int" resultType="user" useCache="false">


SELECT * FROM USER WHERE id = #{id}


</select>


</mapper>


4.2、编写 mapper 接口 mapper.java




package cn.itcast.ssm.mapper;


im


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


port 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

<!-- mapper 配置


MapperFactoryBean=:根据 mapper 接口生成代理对象


-->


<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">


mapperInterface 指定 mapper 接口


<property name="mapperInterface" value="cn.itcast.ssm.mapper.UserMapper"></property>


<property name="sqlSessionFactory" ref="sqlSessionFactory"/>


</bean>

4.3.2、mapper 批量扫描

<!-- mapper 批量扫描,从 mapper 包中扫描出 mapper 接口,自动创建代理对象并且在 spring 容器中注册


遵循规范:将 mapper.java 和 mapper.xml 映射文件名称保持一致,且在一个目录 中


自动扫描出来的 mapper 的 bean 的 id 为 mapper 类名(首字母小写)


-->


<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">


<!-- 指定扫描的包名


如果扫描多个包,每个包中间使用半角逗号分隔


注意:jdk1.7 和 spring3 的 jar 包兼容,jdk1.8 及以上和 spring3 的 jar 包不兼容!和 spring4 的 jar 包兼容


-->


<property name="basePackage" value="cn.itcast.ssm.mapper"/>


<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>


</bean>


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 包

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
MyBatis详解:spring和mybatis整合,linux视频格式转换