刷機命令學習
阿新 • • 發佈:2021-02-07
技術標籤:spring
spring整合mybatis
maven依賴準備
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency >
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId >
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
< version>5.3.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.18</version>
<scope>provided</scope>
</dependency>
</dependencies>
大體配置:
可以看出spring_dao.xml為整個整合的核心
其中包含
- 注入資料庫的登入資訊
<!-- DataSource:使用spring的資料來源替換mybatis的配置-->
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</bean>
-
注入mybatis的配置以及sql語句的對映檔案
<!--固定模式--> <!-- sqlSessionFactory就是sqlSession--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!-- 繫結mybatis--> <property name="configLocation" value="classpath:sql_config.xml"/> <property name="mapperLocations" value="classpath:generator/*.xml"/> <!-- sqlSession--> </bean> <bean class="org.mybatis.spring.SqlSessionTemplate" id="sessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory"/> <!-- 只能用構造器注入,因為沒有set方法--> </bean>
-
注入實現類
<!--注入實現類--> <bean id="student" class="generate.StudentImpl"> <property name="sessionTemplate" ref="sessionTemplate"/> </bean> <bean class="generate.StudentImpl2" id="student2"> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean>
整個spring_dao.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- DataSource:使用spring的資料來源替換mybatis的配置--> <bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=false"/> <property name="username" value="root"/> <property name="password" value=""/> </bean> <!--固定模式--> <!-- sqlSessionFactory就是sqlSession--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!-- 繫結mybatis--> <property name="configLocation" value="classpath:sql_config.xml"/> <property name="mapperLocations" value="classpath:generator/*.xml"/> <!-- sqlSession--> </bean> <bean class="org.mybatis.spring.SqlSessionTemplate" id="sessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory"/> <!-- 只能用構造器注入,因為沒有set方法--> </bean> <!--注入實現類--> <bean id="student" class="generate.StudentImpl"> <property name="sessionTemplate" ref="sessionTemplate"/> </bean> <bean class="generate.StudentImpl2" id="student2"> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean> <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <tx:advice transaction-manager="transactionManager" id="interceptor"> <tx:attributes> <tx:method name="*" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="txcount" expression="execution(* generate.StudentDao.*.* (..))"/> <aop:advisor advice-ref="interceptor" pointcut-ref="txcount"/> </aop:config> </beans>
實現類分為兩種:
1.直接繼承了StudentDao的介面
public class StudentImpl implements StudentDao {
// 原來的操作都使用sqlSession來執行,現在使用SqlSessionTemplate來執行
private SqlSessionTemplate sessionTemplate;
public void setSessionTemplate(SqlSessionTemplate sessionTemplate) {
this.sessionTemplate = sessionTemplate;
}
@Override
public int insert(Student record) {
return 0;
}
@Override
public int insertSelective(Student record) {
return 0;
}
@Override
public List<Student> FindAll() {
StudentDao mapper = sessionTemplate.getMapper(StudentDao.class);
return mapper.FindAll();
}
@Override
public int delete(String record) {
return 0;
}
}
另外一種就比較簡單了,繼承了SqlSessionDaoSupport和StudentDao
public class StudentImpl2 extends SqlSessionDaoSupport implements StudentDao {
@Override
public int insert(Student record) {
return getSqlSession().getMapper(StudentDao.class).insert(record);
}
@Override
public int insertSelective(Student record) {
return getSqlSession().getMapper(StudentDao.class).insertSelective(record);
}
@Override
public List<Student> FindAll() {
Student student = new Student("aa", "aa", "aa", "aa");
int insert = insert(student);
System.out.println("新增" + insert);
int delete = delete("aa");
System.out.println("刪除" + delete);
return getSqlSession().getMapper(StudentDao.class).FindAll();
}
@Override
public int delete(String record) {
return getSqlSession().getMapper(StudentDao.class).delete(record);
}
}
student類
這次使用了lombok的包
@Data
@AllArgsConstructor//生成有參構造
@NoArgsConstructor//生成無參構造
public class Student implements Serializable {
private String id;
private String name;
private String age;
private String card;
private static final long serialVersionUID = 1L;
}
我認為好處就是無需構建get,set方法,以及有參構造和無參構造
@Data:代替了成員變數的get和set方法
@AllArgsConstructor:生成有參構造
@NoArgsConstructor:生成無參構造
測試類
public static void main(String[] args) throws IOException {
ApplicationContext context = new ClassPathXmlApplicationContext("spring_dao.xml");
StudentDao student = context.getBean("student2", StudentDao.class);
List<Student> students = student.FindAll();
for (Student student1 : students) {
System.out.println(student1.toString());
}
}
這裡students2使用的是繼承了SqlSessionDaoSupport和StudentDao的方法,
如果使用之繼承了StudentDao的方法只需要改成studnet1即可