笔记60 Spring+Mybatis整合

整合思路:将SessionFactory交给Spring管理,并且把Mapper和XML结合起来使用。

一、目录结构

二、基本的pojo

Category.java

 1 package com.pojo;
 2 
 3 public class Category {
 4     private int id;
 5     private String name;
 6 
 7     public int getId() {
 8         return id;
 9     }
10 
11     public void setId(int id) {
12         this.id = id;
13     }
14 
15     public String getName() {
16         return name;
17     }
18 
19     public void setName(String name) {
20         this.name = name;
21     }
22 
23     public String toString() {
24         return "Category [id=" + id + ", name=" + name + "]";
25     }
26 }

三、Mapper

在这里使用动态SQL语句,需要新增CategoryDynaSqlProvider,提供CRUD对应的SQL语句。

CategoryMapper.java

 1 package com.mapper;
 2 
 3 import java.util.List;
 4 
 5 import org.apache.ibatis.annotations.DeleteProvider;
 6 import org.apache.ibatis.annotations.InsertProvider;
 7 import org.apache.ibatis.annotations.SelectProvider;
 8 import org.apache.ibatis.annotations.UpdateProvider;
 9 
10 import com.dynasql.CategoryDynaSqlProvider;
11 import com.pojo.Category;
12 
13 public interface CategoryMapper {
14     @InsertProvider(type = CategoryDynaSqlProvider.class, method = "add")
15     public int add(Category category);
16 
17     @DeleteProvider(type = CategoryDynaSqlProvider.class, method = "delete")
18     public void delete(int id);
19 
20     @SelectProvider(type = CategoryDynaSqlProvider.class, method = "get")
21     public Category get(int id);
22 
23     @UpdateProvider(type = CategoryDynaSqlProvider.class, method = "update")
24     public int update(Category category);
25 
26     @SelectProvider(type = CategoryDynaSqlProvider.class, method = "list")
27     public List<Category> list();
28 
29 }

四、CategoryDynaSqlProvider.java

 1 package com.dynasql;
 2 
 3 import org.apache.ibatis.jdbc.SQL;
 4 
 5 public class CategoryDynaSqlProvider {
 6     public String list() {
 7         return new SQL().SELECT("*").FROM("category").toString();
 8     }
 9 
10     public String get() {
11         return new SQL().SELECT("*").FROM("category").WHERE("id=#{id}").toString();
12     }
13 
14     public String add() {
15         return new SQL().INSERT_INTO("category").VALUES("name", "#{name}").toString();
16     }
17 
18     public String update() {
19         return new SQL().UPDATE("category").SET("name=#{name}").WHERE("id=#{id}").toString();
20     }
21 
22     public String delete() {
23         return new SQL().DELETE_FROM("category").WHERE("id=#{id}").toString();
24     }
25 }

或者直接采用xml的方式进行配置:Category.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper
 3     PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 
 6 <mapper namespace="com.mapper.CategoryMapper">
 7     <insert id="add" parameterType="Category">
 8         insert into category ( name ) values (#{name})
 9     </insert>
10 
11     <delete id="delete" parameterType="Category">
12         delete from category where id= #{id}
13     </delete>
14 
15     <select id="get" parameterType="_int" resultType="Category">
16         select * from category where id= #{id}
17     </select>
18 
19     <update id="update" parameterType="Category">
20         update category set name=#{name} where id=#{id}
21     </update>
22     <select id="list" resultType="Category">
23         select * from category
24     </select>
25 </mapper>

五、applicationContext.xml

1.识别注解

1 <context:annotation-config></context:annotation-config>

2.配置数据源

1 <bean name="dataSource"
2         class="org.springframework.jdbc.datasource.DriverManagerDataSource">
3         <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
4         <property name="url"
5             value="jdbc:mysql://localhost:3306/sh?characterEncoding=UTF-8"></property>
6         <property name="username" value="root"></property>
7         <property name="password" value="123456"></property>
8 </bean>

3.配置Mybatis的SqlSessionFactory bean,扫描基本的pojo包、加载数据源、扫描配置xml配置文件(如果使用SQL动态语句,这一步可省略)

1     <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
2         <property name="typeAliasesPackage" value="com.pojo" />
3         <property name="dataSource" ref="dataSource" />
4         <property name="mapperLocations" value="classpath:com/mapper/*.xml"/>
5     </bean>

4.扫描Mapper类

1 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
2         <property name="basePackage" value="com.mapper" />
3 </bean>

applicationContext.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
 4     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
 5     xsi:schemaLocation="
 6    http://www.springframework.org/schema/beans
 7    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 8    http://www.springframework.org/schema/aop
 9    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
10    http://www.springframework.org/schema/tx
11    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
12    http://www.springframework.org/schema/context     
13    http://www.springframework.org/schema/context/spring-context-3.0.xsd">
14 
15 
16     <context:annotation-config></context:annotation-config>
17 
18     <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
19         <property name="typeAliasesPackage" value="com.pojo" />
20         <property name="dataSource" ref="dataSource" />
21         
22     </bean>
23 
24     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
25         <property name="basePackage" value="com.mapper" />
26     </bean>
27     <!-- 配置数据源 -->
28     <bean name="dataSource"
29         class="org.springframework.jdbc.datasource.DriverManagerDataSource">
30         <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
31         <property name="url"
32             value="jdbc:mysql://localhost:3306/sh?characterEncoding=UTF-8"></property>
33         <property name="username" value="root"></property>
34         <property name="password" value="123456"></property>
35     </bean>
36 </beans>

六、测试

 1 package com.test;
 2 
 3 import java.util.List;
 4 
 5 import org.junit.runner.RunWith;
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 import org.springframework.test.context.ContextConfiguration;
 8 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 9 
10 import com.mapper.CategoryMapper;
11 import com.pojo.Category;
12 
13 @RunWith(SpringJUnit4ClassRunner.class)
14 @ContextConfiguration("classpath:applicationContext.xml")
15 public class Test {
16 
17     @Autowired
18     private CategoryMapper categoryMapper;
19 
20     @org.junit.Test
21     public void testAdd() {
22         Category category = new Category();
23         category.setName("new Category");
24         categoryMapper.add(category);
25     }
26 
27     @org.junit.Test
28     public void testList() {
29         System.out.println(categoryMapper);
30         List<Category> cs = categoryMapper.list();
31         for (Category c : cs) {
32             System.out.println(c.getName());
33         }
34     }
35 }
原文地址:https://www.cnblogs.com/lyj-gyq/p/9258531.html