/**导入架包
配置文件
conf.xml(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.project.bean"/>
</typeAliases>
<!--用的是注解下面的mapper可以不要-->
<!-- <mappers>
<mapper resource="com/project/mapper/UserBeanMapper.xml"/>
</mappers> -->
</configuration>
mapper(mybatis)
applicationContext.xm(Spring
applicationContext.xm(Spring)
<?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
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 先将mybaits数据源注入到容器 ,导入jdbc架包-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mysqltest"></property>
<property name="username" value="root"></property>
<property name="password" value="xcb"></property>
</bean>
<!-- 注册一个sqlsessionfactory对象给容器 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- 在spring容器中加载mybaits配置文件 -->
<property name="configLocation" value="classpath:conf.xml"></property>
</bean>
<!-- 注册一个sqlsessionfactory对象 -->针对mybatis的
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- 在spring容器中加载mybaits配置文件 -->
<property name="configLocation" value="classpath:conf.xml"></property>
</bean>
<!-- 注入一个数据映射器,告诉容器Spring 的注解再什么地方,配置文件就需要,
注解的两个作业--读注解--不要持久层实现类,交给Spring容器帮我们管理 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.project.dao"></property>
</bean>
<!-- 产生userDaoImpl ,技术的角度可以不要实现类,从项目结构维护性来说还是需要-->
<bean id="userDaoImpl" class="com.project.dao.impl.UserDaoImpl">
<property name="fa" ref="sqlSessionFactory"></property>
</bean>
<!-- 注册一个事务管理器 ,需要数据源,要把事务提升到业务层,为动态代理事务注册三个属性,在Spring事务里面详解为什么需要事务管理器-->
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
1
1
持久层实现类比如现在有个UserDaoImpl
package com.project.dao.impl;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.project.bean.UserBean;
import com.project.dao.IUserDao;
public class UserDaoImpl implements IUserDao{
private SqlSessionFactory fa;
//要给 SqlSessionFactory提供set方法,因为我们要在applicationContext.xml中将 //SqlSessionFactory注入给userDaoImpl实现类
public void setFa(SqlSessionFactory fa) {
this.fa = fa;
}
@Override
public void login() {
System.out.println("正在进行登录");
}
@Override
public void register() {
System.out.println("正在进行注册");
}
@Override
public void findAll() {
System.out.println("正在获取所有的用户信息");
}
//通过工厂产生session
@Override
public UserBean findById(int id) {
SqlSession session = fa.openSession();
UserBean bean=null;
try {
IUserDao dao = session.getMapper(IUserDao.class);
bean = dao.findById(id);
} catch (Exception e) {
// TODO: handle exception
}finally{
session.close();
}
return bean;
}
}
1
新建一个测试类TestMain
package com.project.test;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.project.bean.UserBean;
import com.project.dao.IUserDao;
import com.project.dao.impl.UserDaoImpl;
public class TestMain {
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
/*
* 区别:
* getBean(IUserDao.class.xxx)
* getBean("xxx")
*
*
* 采用aop编程,获取到的动态代理对象,jdk?cglib
*
* 代理的对象如果有接口,默认使用jdk动态代理
* 代理的对象没有接口是pojo类,使用cglib动态代理
* */
IUserDao dao = (IUserDao) context.getBean("userdao2");
dao.login();
dao.register();
System.out.println("======");
dao.findAll();
//dao.findById();
UserBean bean = (UserBean) context.getBean("userbean");
System.out.println(bean);
}
@Test
public void test2(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
IUserDao dao = (IUserDao) context.getBean("userDaoImpl");
UserBean bean = dao.findById(1);
System.out.println(bean);
}
}
*/