Spring的学习___11. spring 和mybatis的整合

(本案例是idea下的maven工程)

案例一:mybatis的回顾:

整体流程的回顾:

mybatis:
1.实体类(User----》属性名和数据库中字段名相对应
2.接口(UserMapper-----》对数据库的增删改查的业务操作的定义
3.接口的配置文件(UserMapper.xml)----》
  mappers的namespace属性要写对应的接口;
  再写UserMapper接口中增删改查的SQL语句
4.mybatis 的核心配置文件(mybatis-config.xml)--
  日志信息
  别名
  数据库源 driver,url,username,pwd
  mapper的映射器
5.测试类:
  加载mybatis的核心配置文件
  获得sqlSessionFactory对象通过sqlSessionFactoryBuilder
  获得sqlSession通过sqlSessionFactory对象
  获得实体类对象 sqlSession.getMapper(UserMapper.class)

1.pojo实体类:User

public class User {

    private String name;
    private String pwd;
    private int id;

    public User() {
    }

    public User(String name, String pwd, int id) {
        this.name = name;
        this.pwd = pwd;
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                ", id=" + id +
                '}';
    }
}

2.接口 UserMappe

public interface UserMapper {

    List<User> getUser();
}

3.接口的配置文件 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">

<mapper namespace="com.xbf.dao.UserMapper">
    <select id="getUser" resultType="User">
        select * from user
    </select>
</mapper>

4.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>
        <package name="com.xbf.pojo"/>
    </typeAliases>

    <!--数据源的配置-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="1234567890"/>
            </dataSource>
        </environment>
    </environments>

    <!--mapper映射器-->
    <mappers>
        <mapper resource="com/xbf/dao/UserMapper.xml"/>
    </mappers>


</configuration>

5.测试类的编写:

public class Test {

    @org.junit.Test
    public void test() throws IOException {
        //1.
        String resource="mybatis-config.xml";
        InputStream in = Resources.getResourceAsStream(resource);

        //2.获得sqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(in);

        //3.获得sqlSession对象  开启事务管理
        SqlSession sqlSession = sqlSessionFactory.openSession(true);

        //4.实体 mapper
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        //5.执行方法
        List<User> user = mapper.getUser();

        System.out.println(user);
    }

}

案例二:mybatis-spring的整合:

注意:需要在mybatis基础上再导3个包( spring-webmvc ,编织包(横向织入),spring-jdbc (spring数据库连接包),mybatis-spring(Spring-nybatis整合包)):

整体流程的概述:

spring:(过程总结)
1.编写pojo实体类(User2.定义接口(UserMapper)---》定义数据库的增删删除操作
3.定义接口的实现类---》
  主要是为了sqlSession属性,好在Bean中实现注册
  写全接口的增删改查操作
  (利用sqlSession.getMapper()实现)
4.编写UserMapper.xml配置文件---》编写增删改查的sql语句
5.编写mybatis核心配置文件---》主要配置UserMapper.xml,数据源信息已不再其中
6.编写applicationContext.xml文件
  6.1 数据源的配置;
  6.2 通过SqlSessionFactoryBean 创建sqlSessionFactory对象,
      并在Spring中配置mybatis核心配置文件
  6.3 通过sqlSessionFactory对象创建sqlSession对象
  6.4在接口的实现类(UserMapperImpl)加入sqlSession属性
  6.5在Spring bean中进行实现类对象的注册
7.测试:
  7.1加载 spring配置文件,获得conText对象
  7.2获得实现的Bean对象
  7.3调用实现类中的增删改查的方法

1.pojo实体类:User

public class User {

    private String name;
    private String pwd;
    private int id;

    public User() {
    }

    public User(String name, String pwd, int id) {
        this.name = name;
        this.pwd = pwd;
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                ", id=" + id +
                '}';
    }
}

2.接口的定义:UserMapper

public class UserMapperImpl implements UserMapper {

    //添加sqlSession属性
    private SqlSession sqlSession;

    public void setSqlSession(SqlSession sqlSession) {
        this.sqlSession = sqlSession;
    }

    public List<User> getUser() {

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        return mapper.getUser();
    }
}

3.接口实现类的编写:UserMapperImpl

public class UserMapperImpl implements UserMapper {

    //添加sqlSession属性
    private SqlSession sqlSession;

    public void setSqlSession(SqlSession sqlSession) {
        this.sqlSession = sqlSession;
    }

    public List<User> getUser() {

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        return mapper.getUser();
    }
}

4.接口的配置文件: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">

<mapper namespace="com.xbf.dao.UserMapper">
    <select id="getUser" resultType="User">
        select * from user
    </select>
</mapper>

5.mybatisde核心配置文件:mybatis-config.xml

<?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>
        <package name="com.xbf.pojo"/>
    </typeAliases>



    <!--mapper映射器-->
    <mappers>
        <mapper resource="com/xbf/dao/UserMapper.xml"/>
    </mappers>


</configuration>

6.spring 的配置文件:applicationContext.xml

 

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--1.数据源信息-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC"/>
        <property name="username" value="root"/>
        <property name="password" value="1234567890"/>
    </bean>

    <!--2.创建sqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:mybatis-config.xml"/>

    </bean>

    <!--3.创建sqlSession-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>

    <!--4.加入sqlSession属性-->

    <!--5.实体类对象的注入-->
    <bean id="user" class="com.xbf.dao.UserMapperImpl">
        <property name="sqlSession" ref="sqlSession"/>
     </bean>


</beans>

=================================================

<!--3.注册dao层bean-->
    <!--动态实现dao接口注入Spring容器中-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--绑定sqlSessionFactory-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <!--扫描包-->
        <property name="basePackage" value="com.xbf.dao"/>
    </bean>

//直接使用该方法进行接口代理类的动态生成,可以不写接口的实现类。(UserDapImpl)

 

 

7.测试类的编写:

public class Test {

    @org.junit.Test
    public void test(){

        //1.加载配置文件
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");

        UserMapperImpl user = (UserMapperImpl)context.getBean("user");

        List<User> users = user.getUser();



        for (User user1 : users) {
            System.out.println(user1);
        }

    }


}

 

总结:

区别点:

1.数据源的位置不同;

2.spring整合中有了接口的实现类的编写(测试变的更简便);

 

posted @ 2019-07-29 23:21  德鲁大叔817  阅读(239)  评论(0编辑  收藏  举报