目次
- MybatisはSpringを統合します
-
- 1.プロジェクトを作成します
- 2.jarパッケージをインポートします
- 3.mybatisのコア構成ファイルを構成します
- 4.春にデータソースを構成します
- 5.春にSqlSessionFactoryを構成します
- 6.Userクラスとそのマッピングファイルを作成します
- 7.従来の方法を使用してUserDaoと実装クラスを作成します
- 8.春にdaoによって実装されたBeanを構成します
- 9.従来のダオテスト
- 10.daoを統合するためにMapperインターフェイスに変更します
- 11.マッピングファイルをmybatisコア構成ファイルにロードします
- 12.SpringでMapperFactoryBeanを構成します
- 13.Beanファクトリを使用してオブジェクトテストを作成します
- 14. MapperScannerConfigurerを使用してバッチスキャンし、プロキシオブジェクトを作成します
- 15. MapperScannerConfigurerを使用してバッチスキャンし、プロキシオブジェクトテストを作成します
MybatisはSpringを統合します
- 統合バージョン:
- 春3.2
- Mybaties 3.2.7
- 予防:
- Spring3.2はjdk1.7を使用します
- Spring4以降を使用するには、jdk8を使用します
- プロジェクトの構造:
1.プロジェクトを作成します
- javawebプロジェクトを作成する
- WEB-INFの下にlibフォルダーを作成して、jarパッケージを保存します
2.jarパッケージをインポートします
- mybatisコアパッケージと依存パッケージをインポートします
- mysqlデータベースドライバーパッケージをインポートします(独自のデータベースバージョンに従ってインポートします)
- データベースdbcp接続プールをインポートします
- spring + mvcパッケージをインポートします
- Mybatis-spring統合パッケージをインポートします
- トータルジャーパッケージ
3.mybatisのコア構成ファイルを構成します
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--别名配置-->
<typeAliases>
<!--定义单个别名--><!--这样配置用到全类名的地方就可以写成别名user-->
<!--<typeAlias type="com.it.model.User" alias="user"></typeAlias>-->
<!--批量配置别名-->
<!--name:指定批量定义别名的类的包名,别名为类名(首字母大小写都可以)-->
<!--这样配置就是该包下的类名的别名就为类名,大小写都可以
如:com.it.model包下的User类的别名就可以写为 User 或 user -->
<package name="com.it.model"/>
</typeAliases>
<!--加载映射文件-->
<mappers>
<!--<mapper resource="com/it/sqlmap/User.xml"></mapper>-->
<!--第一种:写映射文件名-->
<!--<mapper resource="com/it/mapper/UserMapper.xml"></mapper>-->
<!--第二种:使用完全限定路径【一般不用】-->
<!--<mapper url="file:///D:\MyBatis_day01\src\com\it\mapper\UserMapper.xml"></mapper>-->
<!--第三种:写类名(使用mapper接口的全限定名)
一定要有个同名映射文件与之对应,如果没有,在UserMapper接口中声明注解,否则报错-->
<!--使用注解配置时,要删除或改名映射文件,否则报错-->
<!--注意:不使用注解时,此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下-->
<!--<mapper class="com.it.mapper.UserMapper"></mapper>-->
<!--第四种:写包名【推荐使用】
注册指定包下的所有映射文件-->
<!--注意:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下-->
<mapper resource="com/it/sqlMap/User.xml"></mapper>
<package name="com.it.mapper"/><!--注意这种方式(包配置)只适用于Mapper代理-->
</mappers>
</configuration>
4.春にデータソースを構成します
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
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.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
<!-- 1.配置数据库,dbcp数据库连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis_day01"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<!--最大连接数-->
<property name="maxActive" value="10"/>
<!--最大空闲数-->
<property name="maxIdle" value="5"/>
</bean>
</beans>
5.春にSqlSessionFactoryを構成します
<!--2.配置会话工厂-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sessionFactory">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:SqlMapConfig.xml"></property>
</bean>
6.Userクラスとそのマッピングファイルを作成します
- 次の属性、toStringに対して、get / set、パラメーターなしの構造、およびパラメーター化された構造を提供します。
- 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">
<!--
namespace:命名空间,它的作用就是对SQL进行分类化管理,可以理解为SQL隔离
注意:使用mapper代理开发时,namespace有特殊且重要的作用
-->
<mapper namespace="user">
<!--
id:statement的id,要求在命名空间内唯一
parameterType:参数的java类型
resultType:查询出的单条结果集对应的java类型
#{}:表示一个占位符 ?
#{id}:表示该占位符待接收参数的名称为id。注意:如果参数为简单类型时,#{}里面的参数名称可以是任意定义
-->
<select id="findUserById" parameterType="int" resultType="com.it.model.User">
SELECT * FROM USER WHERE id = #{id}
</select>
</mapper>
7.従来の方法を使用してUserDaoと実装クラスを作成します
- hibernateの使用と同様に、ここではSqlSessionDaoSupportが継承されます。これにより、getSqlSession()メソッドを取得して、データベースを操作するためのSqlSessionオブジェクトを取得できます。
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
@Override
public User findUserById(int id) {
return this.getSqlSession().selectOne("user.findUserById",id);
}
}
8.春にdaoによって実装されたBeanを構成します
<!--配置dao的几种方式-->
<!--第一种-->
<!--3.传统配置dao【现在一般不用】-->
<bean class="com.it.dao.impl.UserDaoImpl" id="userDao">
<property name="sqlSessionFactory" ref="sessionFactory"></property>
</bean>
9.従来のダオテスト
@Test
public void test1(){
//1.加载spring配置文件
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.获取dao的bean
UserDao userDao = (UserDao) context.getBean("userDao");
//3.调用dao方法
User user = userDao.findUserById(1);
System.out.println(user);
}
10.daoを統合するためにMapperインターフェイスに変更します
- UserMapperインターフェイスを作成します(UserDaoインターフェイスをコピーして名前を変更するだけです)
- UserMapper.xmlマッピングファイルを作成します(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">
<!--
namespace:命名空间,它的作用就是对SQL进行分类化管理,可以理解为SQL隔离
注意:使用mapper代理开发时,namespace有特殊且重要的作用
-->
<mapper namespace="com.it.mapper.UserMapper">
<select id="findUserById" parameterType="int" resultType="com.it.model.User">
SELECT * FROM USER WHERE id = #{id}
</select>
</mapper>
11.マッピングファイルをmybatisコア構成ファイルにロードします
- エイリアスを構成するときにコードが上に示されています
<!--加载映射文件-->
<mappers>
<!--<mapper resource="com/it/sqlmap/User.xml"></mapper>-->
<!--第一种:写映射文件名-->
<!--<mapper resource="com/it/mapper/UserMapper.xml"></mapper>-->
<!--第二种:使用完全限定路径【一般不用】-->
<!--<mapper url="file:///D:\MyBatis_day01\src\com\it\mapper\UserMapper.xml"></mapper>-->
<!--第三种:写类名(使用mapper接口的全限定名)
一定要有个同名映射文件与之对应,如果没有,在UserMapper接口中声明注解,否则报错-->
<!--使用注解配置时,要删除或改名映射文件,否则报错-->
<!--注意:不使用注解时,此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下-->
<!--<mapper class="com.it.mapper.UserMapper"></mapper>-->
<!--第四种:写包名【推荐使用】
注册指定包下的所有映射文件-->
<!--注意:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下-->
<mapper resource="com/it/sqlMap/User.xml"></mapper>
<package name="com.it.mapper"/><!--注意这种方式(包配置)只适用于Mapper代理-->
</mappers>
12.SpringでMapperFactoryBeanを構成します
- ファクトリBeanを使用してuserMapperオブジェクトを生成します
<!--第二种-->
<!--4.由spring创建一个userMapper对象,使用工厂来创建对象-->
<bean class="org.mybatis.spring.mapper.MapperFactoryBean" id="userMapper">
<property name="sqlSessionFactory" ref="sessionFactory"></property>
<property name="mapperInterface" value="com.it.mapper.UserMapper"></property>
</bean>
13.Beanファクトリを使用してオブジェクトテストを作成します
@Test
public void test2(){
//1.加载spring配置文件
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.获取dao的bean
UserMapper userMapper = (UserMapper) context.getBean("userMapper");
//3.调用dao方法
User user = userMapper.findUserById(1);
System.out.println(user);
}
14. MapperScannerConfigurerを使用してバッチスキャンし、プロキシオブジェクトを作成します
- 上記の12の構成コードは面倒であり、各マッパーはファクトリーBeanを作成する必要があります
<!--第三种-->
<!--批量创建mapper的bean对象
内部会扫描指定包下的mapper,为每一个接口创建代理对象,名字就是类名,首字母会自动改成小写
使用的时候直接取即可
注意:
1.jdk1.8 用这种方式,bean不能创建成功 ,改成jdk1.7的即可
2.或者spring我换成spring3.2.9或以上就OK了
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.it.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sessionFactory"></property>
</bean>
15. MapperScannerConfigurerを使用してバッチスキャンし、プロキシオブジェクトテストを作成します
-テストは前のテストと同じですが、userMapperを直接取得します(バッチスキャンは自動的にプロキシオブジェクトを作成します)