spring整合mybatisXML版
引用的所有jar包,本demo是一个普通的java项目测试的:
aopalliance.jar
asm-3.3.1.jar
aspectjweaver.jar
cglib-2.2.2.jar
commons-logging-1.1.1.jar
javassist-3.17.1-GA.jar
log4j-1.2.17.jar
log4j-api-2.0-rc1.jar
log4j-core-2.0-rc1.jar
mybatis-3.2.7.jar
mybatis-spring-1.2.3.jar
mysql-connector-java-5.1.20-bin.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
spring-aop-4.1.6.RELEASE.jar
spring-aspects-4.1.6.RELEASE.jar
spring-beans-4.1.6.RELEASE.jar
spring-context-4.1.6.RELEASE.jar
spring-context-support-4.1.6.RELEASE.jar
spring-core-4.1.6.RELEASE.jar
spring-expression-4.1.6.RELEASE.jar
spring-jdbc-4.1.6.RELEASE.jar
spring-orm-4.1.6.RELEASE.jar
spring-tx-4.1.6.RELEASE.jar
spring-web-4.1.6.RELEASE.jar
spring-webmvc-4.1.6.RELEASE.jar
spring整合mybatis可以将mybatis单独配置读取实体类的位置文件部分,其他的配置由spring自己单独管理如,需先创建好数据库中User表:
<?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">
<!-- 配置mybatis -->
<configuration> <!-- 配置别名 -->
<typeAliases>
<package name="mr.li.entity"/>
</typeAliases> <!-- 引入mr.li.entity包下的user.mapper.xml文件,意思为:将此xml文件配置到mybatis下,
由mybatis框架最终执行,在mr.li.entity包下还可引入其他类的xml映射文件,最终都统一由mybatis执行 -->
<mappers>
<!-- 第一种:xml方式连接数据库 -->
<mapper resource="mr/li/entity/user.mapper.xml"/>
</mappers>
</configuration>
在spring中的引用位置则是
<!-- 配置sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 在处引用 -->
<property name="configLocation" value="classpath:mybatis.cfg.xml"/>
</bean>
好了,上面的都是套在下面的beans.xml中引用的,本文主要讲利用一个spring的beans.xml配置来完成spring继承mybatis,其中实体类(User)可以是user.mapper.xml的方式配置,也可以是@select...
注解的方式配置。总之都是要写sql语句的。下面展示的代码中UserMapper是注解版的,而UserDao则是xml版的(只对于实体类的配置而言)。写的不标准,但是功能做到了,本应该用userService,但是为了方便看,所以尽可能的简单一点。
1.userDao
package mr.li.dao;
import java.util.List;
import mr.li.entity.User;
public interface UserDao {
/**
* 获得一个User集合
* @return
*/
List<User> selectList();
}
2.userDaoImpl
package mr.li.dao.impl; import java.util.List; import org.mybatis.spring.support.SqlSessionDaoSupport; import mr.li.dao.UserDao;
import mr.li.entity.User;
/**
* 在mybatis-spring-1.2.3jar中,不在需要注入sqlSessionTemplate类,而是直接继承SqlSessionDaoSupport
* 类来实现利用mybatis操作数据库的功能,此类中还是通过封装了sqlSessionTemplate类来实现的,这样做的好处
* 是能更好的支持数据库事务。
* @author Administrator
*
*/
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao { @Override
public List<User> selectList() {
//此处引用user.mapper.xml文件中id为selectAll的标签
return getSqlSession().selectList("mr.li.entity.user.mapper.selectAll");
}
}
3.spring配置beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 配置数据源:连接数据库 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean> <!-- 声明式事务配置 开始 -->
<!-- 配置事务管理器 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置事务通知 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<!-- 配置哪些方法使用什么样的事务,配置事务的传播特性:例如:REQUIRED是:在执行此配置的所有方法是先看看有没有事务开启(就是有没有其他此配置方法在执行),如果有那么在此方法执行完后等待此次整个事务
中的其他方法执行完毕一起提交,如果中间有哪个方法抛出异常则全部数据回滚 -->
<tx:method name="add" propagation="REQUIRED"/>
<tx:method name="insert" propagation="REQUIRED"/>
<tx:method name="update" propagation="REQUIRED"/>
<tx:method name="delete" propagation="REQUIRED"/>
<tx:method name="remove*" propagation="REQUIRED"/>
<tx:method name="get" read-only="true"/>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<!-- 以上配置的方法事事务在dao.impl中执行时会开启此次事务,一般正常配置应在service中配置,而不是dao中,此处仅用于测试 -->
<aop:pointcut expression="execution(* mr.li.dao.impl.*.*(..))" id="pointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
</aop:config>
<!-- 声明式事务配置 结束 --> <!-- 创建连接数据库第一种方式:创建userDao实例开始 -->
<!-- 配置sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 设置spring读取实体对象的配置类信息,在entity包下的所有.mapper.xml文件 -->
<property name="mapperLocations" value="classpath:mr/li/entity/*.mapper.xml"/>
</bean>
<!-- 通过set方法创建一个userDao的实例 -->
<bean id="userDao" class="mr.li.dao.impl.UserDaoImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
<!-- 创建userDao实例结束 --> <!-- 创建连接数据库第二种方式:采用注解的方式 -->
<bean id="userMapper" class = "org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="mr.li.mapper.UserMapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean> </beans>
4.实体类的xml版,user.mapper.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="mr.li.entity.user.mapper"> <!-- mybatis查询user集合,这只id为selectAll,其他地方如果引用就需要调用这个id
resulType:这参数作用:返回类型:如果前面有指定包名则会加上前面的包名,如果没有设置则需要全名
这里不能指定所以用的是全名 -->
<select id="selectAll" resultType="mr.li.entity.User">
select * from user
</select>
</mapper>
5.实体类的注解版Mapper
package mr.li.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Select;
import mr.li.entity.User;
public interface UserMapper {
@Select("select * from user")
List<User> selectList();
}
7.User实体类
package mr.li.entity;
public class User {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public User(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public User() {
}
}
8.测试类
package mr.li.test; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import mr.li.dao.UserDao;
import mr.li.entity.User;
import mr.li.mapper.UserMapper; public class Test { public static void main(String[] args) {
//第一种方式
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
UserDao userDao = (UserDao)context.getBean("userDao");
System.out.println(userDao.selectList().size()); //第二种方式
UserMapper userMapper = (UserMapper)context.getBean("userMapper");
for(User user : userMapper.selectList()) {
System.out.println(user.getName());
}
}
}
测试结果,此结果是mysql数据库中的user表信息:
2
王二小
许三多
spring整合mybatisXML版的更多相关文章
- 手写Mybatis和Spring整合简单版示例窥探Spring的强大扩展能力
Spring 扩展点 **本人博客网站 **IT小神 www.itxiaoshen.com 官网地址****:https://spring.io/projects/spring-framework T ...
- spring整合ssmXML版
以下是一个简单的ssm项目:如果中途报错,肯定是tomcat配置或者数据库配置有问题,在程序中注意将包名等配置换成自己的.数据库表需要提前建好,并加入数据,注意表结构要和实体对象对应. 1.开发条件: ...
- Spring整合MyBatis整合
1.导入所需要的jar依赖 !--MyBatis和Spring的整合包 由MyBatis提供--> <dependency> <groupId>org.mybatis&l ...
- MyBatis和Spring整合案例
1.所需要导入的jar文件 !--MyBatis和Spring的整合包 由MyBatis提供--> <dependency> <groupId>org.mybatis&l ...
- Spring整合Mybatis报 java.lang.ClassNotFoundException:org.springframework.core.metrics.ApplicationStartup,即:spring的版本过高,采用RELEASE稳定版
1.遇到的问题: 今天在弄spring整合mybatis的时候遇到一个小问题,如图所示: 简单来说:就是我的spring的xml文件没找到,我就奇了怪了,我所有的配置都没问题啊! 我pom.xml配置 ...
- Spring学习总结(六)——Spring整合MyBatis完整示例
为了梳理前面学习的内容<Spring整合MyBatis(Maven+MySQL)一>与<Spring整合MyBatis(Maven+MySQL)二>,做一个完整的示例完成一个简 ...
- Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)一
MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中. 使用这个类库中的类, Spring 将会加载必要的MyBatis工厂类和 session 类. 这个类库 ...
- redis集群配置,spring整合jedis,缓存同步
前台的商品数据(图片等加载缓慢)查询,先从redis缓存查询数据. redis是一个nosql数据库,内存版数据库,读取速度11w/s.本身具有内存淘汰机制,是单线程服务器(分时操作系统),线程安全. ...
- Spring整合Redis&JSON序列化&Spring/Web项目部署相关
几种JSON框架用法和效率对比: https://blog.csdn.net/sisyphus_z/article/details/53333925 https://blog.csdn.net/wei ...
随机推荐
- js获取对象的最后一个
Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 (两者的主要区别是 一个 for-i ...
- python内置模块之collections(六)
前言 collections是Python内建的一个集合模块,提供了许多有用的集合类. 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python ...
- openstack新版本ocata的接口改动
新增placement API,部分替代了原先的nova api的部分功能接口 可在此页面查看API详情及示例:https://specs.openstack.org/openstack/nova-s ...
- 使用光盘搭建本地yum源
刚装好的系统,想安装一些常用软件和一些包组的时候,就可以使用安装光盘搭建本地yum 第一步:挂载安装光盘 mount /dev/cdrom /mnt 第二步:编辑repo yum源文件 [root@l ...
- Window下通过charles代理抓取iphone/android手机Https请求乱码问题处理
Window下通过charles代理抓取iphone手机Https请求乱码问题 如果保持默认设置,https的reqeust和response都是乱码,设置完之后https就可以抓包了 手机端操作: ...
- S5PV210 NAND Flash
NAND Flash 关于NAND FlashS5PV210的NAND Flash控制器有如下特点:1) 支持512byte,2k,4k,8k的页大小2) 通过各种软件模式来进行NAND Flash的 ...
- 几种常用的Interpolator(插值器)的动画效果
在实现动画的非线性变化的方法中,常用的一种是为动画添加插值器以改变视图的属性值,从而实现理想的动画效果.Interpolator使用相对简单,下面就只给出一些提供的插值器的默认效果. 在代码中:直接调 ...
- 树形插件 --- zTree
地址:http://www.treejs.cn/v3/api.php
- Java 程序员必须收藏的资源大全
Java 程序员必须收藏的资源大全 Java(27) 古董级工具 这些工具伴随着Java一起出现,在各自辉煌之后还在一直使用. Apache Ant:基于XML的构建管理工具.官网 cglib:字节码 ...
- Java中强、软、弱、虚引用
1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使 ...