spring mybatis 整合配置文件

mybatis配置文件 大部分配置放到了spring配置文件中

<configuration>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <typeAliases>
        <package name="com.tv189.entity"/>
    </typeAliases>
<!--1.配置数据源
    2.指定mapper映射文件-->
</configuration>

spring 配置文件

<!--配置数据源 以前在mybatis.xml中的操作-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="username" value="root" />
        <property name="password" value="123456" />
        <property name="url" value="jdbc:mysql://localhost:3301/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8" />
    </bean>
<!--声明sqlSessionFactory与SQLSession 都是为了简化代码
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
            SqlSession sqlSession = sqlSessionFactory.openSession(true);
    -->
    <!--声明sqlSessionFactory 指定mybatis的配置文件 以及mapper映射文件(以前在mybatis中)-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:mybatis-config.xml" />
        <property name="mapperLocations" value="classpath:com/tv189/mapper/*.xml" />
    </bean>
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory" />
    </bean>
<!--使用了SQLSessionTemplate 创建SqlSessionTemplate的bean 需要声明sqlSessionTemplate 并通过构造方法注入sqlSessionFactory
    然后再实现类中声明userMapperImp 并设置get方法 然后再spring中注入-->
    <bean id="userMapperImp" class="com.tv189.service.UserServiceImp">
        <property name="sqlSession" ref="sqlSession" />
    </bean>
    <!--使用SqlSessionDaoSupport 免去了创建SqlSessionTemplate 在实现类中不用声明sqlSessionTemplate和get方法 但是还是需要在实现类中注入sqlSessionFactory-->
    <bean id="userMapperImp2" class="com.tv189.mapper.UserMapperImp2">
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>

mapper接口

public interface UserMapper {

    /**
     * 查询用户
     * @param user
     * @return
     */
    List<User> selectUser(User user);
    /**
     * 新增用户
     * @param user
     * @return int
     */
    int addUser(User user);

    /**
     * 修改用户
     * @param user
     * @return int
     */
    int updateUser(User user);
}

springIOC不能注入接口
所以还需要写实现类 之后配置mapper接口扫描包动态实现mapper接口 注入到容器中,就不用再手写mapper接口实现类了
mapper接口实现类1
使用SQLSessionTemplate的方式获取SQLSession

public class UserMapperImp implements UserMapper {
    private SqlSessionTemplate sqlSession;

    public void setSqlSession(SqlSessionTemplate sqlSession) {
        this.sqlSession = sqlSession;
    }
    @Override
    public List<User> selectUser(User user) {
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        return mapper.selectUser(user);
    }

    @Override
    public int addUser(User user) {
        return 0;
    }

    @Override
    public int updateUser(User user) {
        return 0;
    }
}

mapper接口实现类2
使用SqlSessionDaoSupport获取SqlSession

public class UserMapperImp2 extends SqlSessionDaoSupport implements UserMapper {
    @Override
    public List<User> selectUser(User user) {
        UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
        return mapper.selectUser(user);
    }

    @Override
    public int addUser(User user) {
        UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
        return mapper.addUser(user);
    }

    @Override
    public int updateUser(User user) {
        UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
        return mapper.updateUser(user);
    }
}

spring与mybatis没有结合时测试方法

try {
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
            SqlSession sqlSession = sessionFactory.openSession(true);
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            User user = new User();
            List<User> users = mapper.selectUser(user);
            System.out.println(users);
        } catch (IOException e) {
            e.printStackTrace();
        }

spring与mybatis结合之后的测试方法

//使用sqlSessionTemplate
    @Test
    public void testSelect2(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserMapperImp userMapperImp = (UserMapperImp) context.getBean("userMapperImp");
        System.out.println(userMapperImp.selectUser(new User()));
    }

    //使用sqlSessionDaoSupport
    @Test
    public void testSelect3(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserMapper userMapperImp = (UserMapperImp2)context.getBean("userMapperImp2");
        System.out.println(userMapperImp.selectUser(new User()));
    }
posted @ 2021-04-01 15:06  忆尘不散  阅读(169)  评论(0)    收藏  举报