标签:
这篇文章很重要,
第一步:我们讲一下整合的思路:
我们以前要用Mybatis是需要sqlMapConfig.xml(这个配置文件需要配置dataource,以及mapper.xml文件。)sqlMapConfig.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> <!-- properties的配置必须写在typeAliases的上面 --> <properties resource="db.properties"></properties> <settings> <setting name="lazyLoadingEnabled" value="true"/> <setting name="aggressiveLazyLoading" value="false"/> </settings> <!-- 和spring整合后 environments配置将废除--> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理--> <transactionManager type="JDBC" /> <!-- 数据库连接池--> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> <!-- 把映射文件(sqlmap/user.xml)加载进sqlMapConfig.xml--> <mappers> <!-- 把mapper.xml加载进sqlMapConfig.xml--> <!-- 遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致 且在一个目录中。 当着这个规范的前提是:使用mapper代理方法。 --> <mapper class="cn.itcast.mybatis.mapper.OrdersMapperCustom"/> </mappers> </configuration>
现在我们加入spring之后,database就要交给spring的配置文件applicationContext.xml来处理了。而且我们以前在用Dao时,传统的做法是要在Dao类中有SqlSessionFactory,现在用Spring之后,最主要的改变就是这里了。
需要spring通过单例方式管理SqlSessionFactory。
spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession。(spring和mybatis整合自动完成)
持久层的mapper都需要由spring进行管理。
第二步:给出具体案例:
案例结构如下:
1.lib里面的jar包如下:
2.我介绍下每个包里面的含义:
三个sourcefile:
src:有两个包:
cn.itcast.ssm.Dao包下面放着Dao和Dao继承类;
cn.itcast.ssm.po包下面放着pojo类;
config:是放配置文件的。
mybatis/sqlMapConfig.xml:mybatis总的配置文件。
spring/applicationContext.xml:spring的配置文件。
sqlmap/user.xml:mapper.xml文件
db.properties:数据库的配置文件。
log4j.properties:日志文件。
test:放置测试文件:TestSpringMybatis.java.
下面给出每个文件的具体代码:
UserDao:
package cn.itcast.ssm.Dao; public interface UserDao { public void findUserById(int id); }
UserDaoImpl:
package cn.itcast.ssm.Dao; import org.apache.ibatis.session.SqlSession; import org.mybatis.spring.support.SqlSessionDaoSupport; import cn.itcast.ssm.po.User; //这个类继承了SqlSessionDaoSupport,可以通过this.getSqlSession()来得到SqlSession //通过这种方式来注入。 public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{ @Override public void findUserById(int id) { SqlSession session=this.getSqlSession(); User user=session.selectOne("test.findUserById",id); System.out.println(user.getUsername()); } }
User.xml:
package cn.itcast.ssm.po; import java.io.Serializable; import java.util.Date; import java.util.List; public class User implements Serializable { private int id;//对应数据库中主键 private String username;//对应数据库中用户的名称 private Date birthday;//对应数据库中的生日 private String sex;//性别 private String address;//地址 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
SqlMapConfig.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> <!-- 把映射文件(sqlmap/user.xml)加载进sqlMapConfig.xml--> <mappers> <mapper resource="sqlmap/user.xml"/> </mappers> </configuration>
applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <!-- 加载配置文件 --> <context:property-placeholder location="classpath:db.properties" /> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driver}"></property> <property name="url" value="${jdbc.url}"></property> <property name="password" value="${jdbc.password}"></property> <property name="username" value="${jdbc.username}"></property> <property name="maxActive" value="10"></property> <property name="maxIdle" value="5"></property> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="mybatis/SqlMapConfig.xml"></property> <!-- 配置数据源 --> <property name="dataSource" ref="dataSource"></property> </bean> <bean id="UserDao" class="cn.itcast.ssm.Dao.UserDaoImpl"> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean> </beans>
User.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"> <!-- nanmespace:命名空间。 作用就是对sql进行分类话管理,理解Sql分离 注意:使用mapper代理方式,namespace有特殊重要的作用 --> <mapper namespace="test"> <!-- 根据id获取用户信息 --> <!-- 在映射文件中配置很多sql语句 --> <!-- id:标识映射文件中的sql; 将sql语句封装到mappedStatement对象中,所以将id称为statement的id;parmenterType:指定输入的参数的类型,这里指定的int型 #{}表示一个占位符号; #{id}:其中的id表示接收输入的参数,参数名称就是id,如果输入参数就是简单类型,#{}中的参数名可以任意,可以value或其它名称 resultType:指定的sql输出结果的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象; --> <select id="findUserById" parameterType="int" resultType="cn.itcast.ssm.po.User"> select * from user where id = #{id} </select> </mapper>
dp.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybaits
jdbc.username=root
jdbc.password=root
log4j.properties:
# Global logging configuration
#\u5728\u5f00\u53d1\u73af\u5883\u4e0b\u65e5\u5fd7\u7ea7\u522b\u8981\u8bbe\u7f6e\u6210DEBUG\uff0c\u751f\u4ea7\u73af\u5883\u8bbe\u7f6e\u6210info\u6216error
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
TestSpringMybatis.java
package springmvc_mybatis_shen; import org.junit.Before; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.itcast.ssm.Dao.UserDao; public class TestSpringMybatis { ApplicationContext applicationContext; @Before public void setup() {//spring的方式加载配置文件 applicationContext=new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml"); } @Test public void testSpringMyabtis() {UserDao userDao=(UserDao) applicationContext.getBean("UserDao"); userDao.findUserById(1); } }
运行结果:正确。
DEBUG [main] - Searching for key ‘spring.liveBeansView.mbeanDomain‘ in [systemProperties]
DEBUG [main] - Searching for key ‘spring.liveBeansView.mbeanDomain‘ in [systemEnvironment]
DEBUG [main] - Could not find key ‘spring.liveBeansView.mbeanDomain‘ in any property source. Returning [null]
DEBUG [main] - Returning cached instance of singleton bean ‘UserDao‘
DEBUG [main] - Creating a new SqlSession
DEBUG [main] - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@30e07209] was not registered for synchronization because synchronization is not active
DEBUG [main] - Fetching JDBC Connection from DataSource
DEBUG [main] - JDBC Connection [jdbc:mysql://localhost:3306/mybaits, UserName=root@localhost, MySQL-AB JDBC Driver] will not be managed by Spring
DEBUG [main] - ==> Preparing: select * from user where id = ?
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <== Total: 1
DEBUG [main] - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@30e07209]
DEBUG [main] - Returning JDBC Connection to DataSource
王五
30Mybatis_mybatis和spring整合-原始dao开发
标签:
原文地址:http://www.cnblogs.com/shenxiaoquan/p/5797833.html