sessionmybatis的实现就是对原有的一部分内容进行替换和简化.
首先原有的basedao结构可以被配置文件进行替换掉,配置文件中可以对数据库的连接进行直接的配置.
mybatis中对dao层的实现进行了简化,以往的dao层实现都是通过继承这个借口,进行方法的实现, 现在对于虚拟方法的实现由XML文件进行,XML文件通过命名空间namespace的方法与dao文件建立联系,通过取值dao文件的方法名进行实现,同时, XML文件中可以实现更加方便的SQL编写OGNL语句的书写,通过该语句可以实现更为灵活的SQL连接.
mybatis最后的使用则是:
// 测试之前的初始化
@Before
public void init() throws IOException {
// 获取mybatis-config.xml 的输入流
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
// 创建sqlSessionFactory 对象 完成配置文件的读取
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
// 创建sqlsession
session = factory.openSession();
}
在获取了足够的配置文件和前置条件之后,通过 session进行操作:
// 使用selectOne() 方法进行
@Test
public void testGetTotalCount() throws IOException {
// 参数是mapper 的 namespace + select 的 id
int count = session.selectOne("dao.UserMapper.getTotalCount");
System.out.println("人数是:" + count);
}
// 通过getMapper() 方法进行
@Test
public void testFindAll() throws IOException {
UserMapper userdao = session.getMapper(UserMapper.class);
// service 调用dao
List<User> count = userdao.findAll();
for (User user : count) {
System.out.println(user.getUserName());
}
}
spring对mybatis的整合:
首先对mybatis中的配置文件进行整合,将mybatis的配置文件合并到自己的spring-mybatis.XML文件中
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="localhost" value="classpath:db.properties"></property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url">
<value><![CDATA[jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf-8]]></value>
</property>
<!-- property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms?
useUnicode=true&characterEncoding=utf-8" /> -->
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<!-- 配置SqlSessionFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 引用数据源组件 -->
<property name="dataSource" ref="dataSource" />
<!-- 引用MyBatis配置文件中的配置 -->
<property name="configLocation" value="classpath:mybatis-config.xml" />
<!-- 配置关联值实体类文件 -->
<property name="typeAliasesPackage" value="cn.bdqn.entity"></property>
<!-- 配置SQL映射文件信息 -->
<property name="mapperLocations">
<list>
<value>classpath:cn/bdqn/dao/*.xml</value>
</list>
</property>
</bean>
这样的话mybatis的配置文件就被spring的配置文件合并了:
连接数据库的关键数据存储在相关的配置文件中db.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf-8
username=root
password=root
通过以下语句读取配置文件中的数据:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="localhost" value="classpath:db.properties"></property>
</bean>
进行数据库的连接:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url">
<value><![CDATA[jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf-8]]></value>
</property>
<!-- property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms?
useUnicode=true&characterEncoding=utf-8" /> -->
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
替代mybatis文件关联dao层文件:
<property name="typeAliasesPackage" value="cn.bdqn.entity"></property>
最后将mybatis实际运用时的需要建立的sqlsession工厂函数直接在配置中进行了明确:
<!-- 配置SqlSessionFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 引用数据源组件 -->
<property name="dataSource" ref="dataSource" />
<!-- 引用MyBatis配置文件中的配置 -->
<property name="configLocation" value="classpath:mybatis-config.xml" />
<!-- 配置关联值实体类文件 -->
<property name="typeAliasesPackage" value="cn.bdqn.entity"></property>
<!-- 配置SQL映射文件信息 -->
<property name="mapperLocations">
<list>
<value>classpath:cn/bdqn/dao/*.xml</value>
</list>
</property>
</bean>
spring中最终就是将mybatis全部吸收了,没有了配置文件,没有了执行时需要进行的sqlsession创建,只保留了最为精华的mapper.xml文件,方法的使用则通过注解的方式进行.
在获取了足够的配置文件和前置条件之后,通过 session进行操作:
// 使用selectOne() 方法进行
@Test
public void testGetTotalCount() throws IOException {
// 参数是mapper 的 namespace + select 的 id
int count = session.selectOne("dao.UserMapper.getTotalCount");
System.out.println("人数是:" + count);
}
// 通过getMapper() 方法进行
@Test
public void testFindAll() throws IOException {
UserMapper userdao = session.getMapper(UserMapper.class);
// service 调用dao
List<User> count = userdao.findAll();
for (User user : count) {
System.out.println(user.getUserName());
}
}