1、MyBatisの-Spring統合
公式サイト:のhttp://mybatis.org/spring/zh/index.html
MyBatisのスプリングは、あなたがシームレスにSpringとコードMyBatisのを統合するのに役立ちます。
マッパーとマッパーを作成SqlSession
し、Beanに注入。
必要なバージョンに対応しています。
パッケージの構造を初めて目
では
pom.xml
、対応するファイルの依存関係を導入<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>spring02</artifactId> <groupId>com.jiang</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>spring04</artifactId> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.8</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!--Spring--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.10.RELEASE</version> </dependency> <!--Spring jdbc(new)--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.1.10.RELEASE</version> </dependency> <!--aop aspectjweaver--> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.4</version> </dependency> <!--mybatis-spring--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.2</version> </dependency> </dependencies> <!-- 如果xml在java文件下,就要设置资源过滤--> <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build> </project>
書き込み
UserMapper
インタフェースpackage com.jiang.mapper; import com.jiang.pojo.User; import java.util.List; public interface UserMapper { List<User> getUserList(); }
書き込み
User
エンティティクラスpackage com.jiang.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class User { private int id; private String name; private String pwd; }
書き込み
UserMapper.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=绑定一个对应的Dao/Mapper接口--> <mapper namespace="com.jiang.mapper.UserMapper"> <!--select查询语句--> <select id="getUserList" resultType="com.jiang.pojo.User"> select * from mybatis.user </select> </mapper>
コードの書かれた
applicationContext.xml
文書<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <!--整合mybatis--> <!--1.数据源配置--> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </bean> <!--2.注入sqlSessionFactory--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!--别名--> <property name="typeAliases" value="com.jiang.pojo.User"/> <!--扫描包--> <property name="mapperLocations" value="classpath:com/jiang/xml/*.xml"/> </bean> <!--3.创建sqlSession--> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory"/> </bean> <!--4.放入bean--> <bean id="userMapperImpl" class="com.jiang.mapper.impl.UserMapperImpl"> <property name="sqlSession" ref="sqlSession"/> </bean> </beans>
applicationContext.xml
ステップ3の準備が完了すると、書き込みを行うUserMapper
インタフェースの実装クラスをUserMapperImpl
、そして最後にステップ4を行いますpackage com.jiang.mapper.impl; import com.jiang.pojo.User; import com.jiang.mapper.UserMapper; import org.mybatis.spring.SqlSessionTemplate; import java.util.List; //实现类 public class UserMapperImpl implements UserMapper { //注入sqlSession: Spring管理了 private SqlSessionTemplate sqlSession; public void setSqlSession(SqlSessionTemplate sqlSession) { this.sqlSession = sqlSession; } @Override public List<User> getUserList() { UserMapper mapper = sqlSession.getMapper(UserMapper.class); return mapper.getUserList(); } }
2、事務の制御
以下の操作は、上記のすべての操作がで成功していることを前提としています!
付け
UserMapper
の追加と削除、ユーザーが近づい増加する中でpackage com.jiang.mapper; import com.jiang.pojo.User; import java.util.List; public interface UserMapper { List<User> getUserList(); //添加用户 int addUser(User user); //删除用户 int deleteUser(int id); }
で
UserMapperImpl
書き換え方法package com.jiang.mapper.impl; import com.jiang.pojo.User; import com.jiang.mapper.UserMapper; import org.mybatis.spring.SqlSessionTemplate; import java.util.List; //实现类 public class UserMapperImpl implements UserMapper { //注入sqlSession: Spring管理了 private SqlSessionTemplate sqlSession; public void setSqlSession(SqlSessionTemplate sqlSession) { this.sqlSession = sqlSession; } //查询用户 @Override public List<User> getUserList() { UserMapper mapper = sqlSession.getMapper(UserMapper.class); return mapper.getUserList(); } //添加用户 @Override public int addUser(User user) { UserMapper mapper = sqlSession.getMapper(UserMapper.class); return mapper.addUser(user); } //删除用户 @Override public int deleteUser(int id) { UserMapper mapper = sqlSession.getMapper(UserMapper.class); return mapper.deleteUser(id); } }
では
UserMapper.xml
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=绑定一个对应的Dao/Mapper接口--> <mapper namespace="com.jiang.mapper.UserMapper"> <!--select查询语句--> <select id="getUserList" resultType="com.jiang.pojo.User"> select * from mybatis.user </select> <!--insert添加语句--> <insert id="addUser" parameterType="User"> insert into user (id,name,pwd) values (#{id},#{name},#{pwd}) </insert> <!--delete删除语句--> <delete id="deleteUser" parameterType="int"> delete from user where id=#{id} </delete> </mapper>
で
applicationContext.xml
追加トランザクションとヘッダAOPのサポート、および統合事務をファイル!<!--添加事务和AOP支持--> <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" http://www.springframework.org/schema/tx https://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd"> <!--整合事务--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <constructor-arg ref="dataSource" /> </bean> <!--事务配置增强,一定要检查pom.xml文件中有没有aop aspectjweaver 织入包--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!--propagation 事务的传播特性 默认REQUIRED--> <!-- * 控制所有方法--> <tx:method name="*" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <aop:config> <!--切入点--> <aop:pointcut id="txPointCut" expression="execution(* com.jiang.mapper.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/> </aop:config> </beans>
テスト
@Test public void test3(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserMapper userMapperImpl = (UserMapper) context.getBean("userMapperImpl"); userMapperImpl.addUser(new User(4,"嘻嘻","898798")); }
テストは成功です!
注意事項:
テストクラスの場合:
UserMapper userMapperImpl = (UserMapper) context.getBean("userMapperImpl");
読みます:
UserMapperImpl userMapperImpl = (UserMapperImpl) context.getBean("userMapperImpl");
これは、型変換の例外が報告されます。
java.lang.ClassCastException: com.sun.proxy.$Proxy8 cannot be cast to com.jiang.mapper.impl.UserMapperImpl
ます。https://blog.csdn.net/yinzn2011/article/details/46455973理由は、参照ブログの説明します