MyBatis和Spring相结合-环境搭建
来源:互联网 发布:c 知乎 编辑:程序博客网 时间:2024/06/05 18:08
—-将MyBatis和Spring相结合也就是将类的创建交给Spring来管理,以及事物的开启和提交也交给Spring来操作,避免我们自己做一些繁琐的事,让我们不再关注事物的开启和提交,一心去做有关项目的其他操作。该项目主要是通过Maven来管理其中所用到的jar包,所以我在这里只贴出所用到的一些jar包的图出来:
1.搭建环境自然避免不了配置文件,由于我创建的是Maven项目,首先在src/main/resources文件下面创建applicationContext.xml,里面主要数据库的一些配置,以及事物管理器和一些Bean的配置,下面是该文件的内容:
<?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" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd" default-autowire="no" default-lazy-init="false"> <!-- 扫描Spring组件的包路径 --> <context:component-scan base-package="com.ecjtu.spring.*"></context:component-scan> <!-- 读取外部的配置文件,这个配置文件主要配置了数据库的连接信息 --> <bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"> <value>classpath:db-config.properties</value> </property> </bean> <!--本示例采用DBCP连接池,应预先添加DBCP包的依赖。 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driverClass}"/> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- sqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--dataSource属性指定要用到的连接池--> <property name="dataSource" ref="dataSource"/> <property name="typeAliasesPackage" value="com.ecjtu.*.bean" /> <property name="mapperLocations" > <list> <!--xml文件的位置--> <value>classpath:/com/ecjtu/spring/bean/*.xml</value> <!-- <value>classpath:/com/ecjtu/test/entity/*.xml</value> --> </list> </property> </bean> <bean id="userOperation" class="org.mybatis.spring.mapper.MapperFactoryBean"> <!--sqlSessionFactory属性指定要用到的SqlSessionFactory实例--> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> <!--mapperInterface属性指定映射器接口,用于实现此接口并生成映射器对象--> <property name="mapperInterface" value="com.ecjtu.spring.IOperation.UserOperation" /> </bean> <bean id="deptOperation" class="org.mybatis.spring.mapper.MapperFactoryBean"> <!--sqlSessionFactory属性指定要用到的SqlSessionFactory实例--> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> <!--mapperInterface属性指定映射器接口,用于实现此接口并生成映射器对象--> <property name="mapperInterface" value="com.ecjtu.spring.IOperation.DeptOperation" /> </bean> <!-- 事物transactionManager管理 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 事物通知Advice Aspect是横切面,是一个抽象的概念, AOP功能增强器,Advice是Aspect的具体实现--> <tx:advice id="transactionAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- propagation事物传播行为,isolation,事物的隔离级别 rollback-for,回滚策越--> <tx:method name="*" propagation="REQUIRED" rollback-for="java.lang.Exception" isolation="DEFAULT"/> <!-- 对查找方法进行只读事务 --> <tx:method name="get" read-only="true"/> </tx:attributes> </tx:advice> <!-- 切入点的配置 --> <aop:config> <aop:advisor advice-ref="transactionManager" pointcut="execution(* com.ecjtu.spring.service.*.*(..))"/> </aop:config></beans>
注:里面db-config.properties文件主要是数据库的连接属性,通过改变文件属性文件的内容来达到更改数据库连接
<property name="mapperLocations" > <list> <value>classpath:/com/ecjtu/spring/bean/*.xml</value> </list></property>
上面的代码片段主要是配置实体类对应的xml文件的位置,这种方式就可以减少一个配置文件,还有一种方式则是再创建一个配置文件mybatis-config.xml,在里面配置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> <!-- 实体类Mapping映射文件 --> <mappers> <mapper resource="com/ecjtu/mybatis/entity/mybatis-user-sql.xml"/> </mappers></configuration>
2.部门实体和员工实体的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="com.ecjtu.spring.IOperation.DeptOperation"> <!-- 部门联合用户进行查询的配置 (一对多的方式:一个部门对应多个用户) --> <resultMap type="com.ecjtu.spring.bean.Dept" id="DeptsMap"> <id property="deptId" column="DEPTID"/> <result property="deptName" column="DEPTNAME"/> <!--记得加上命名空间--> <collection column="DEPTID" property="users" ofType="com.ecjtu.spring.bean.User" select="com.ecjtu.spring.IOperation.UserOperation.selectUserByDept"></collection> </resultMap> <!-- 查询部门 --> <select id="selectDepts" parameterType="Integer" resultMap="DeptsMap"> SELECT * FROM DEPT WHERE DEPTID = #{deptId} </select></mapper>
<?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="com.ecjtu.spring.IOperation.DeptOperation"> <!-- 部门联合用户进行查询的配置 (一对多的方式:一个部门对应多个用户) --> <resultMap type="com.ecjtu.spring.bean.Dept" id="DeptsMap"> <id property="deptId" column="DEPTID"/> <result property="deptName" column="DEPTNAME"/> <!--记得加上命名空间--> <collection column="DEPTID" property="users" ofType="com.ecjtu.spring.bean.User" select="com.ecjtu.spring.IOperation.UserOperation.selectUserByDept"></collection> </resultMap> <!-- 查询部门 --> <select id="selectDepts" parameterType="Integer" resultMap="DeptsMap"> SELECT * FROM DEPT WHERE DEPTID = #{deptId} </select></mapper>
注意:此时先记住这两个xml文件的命名空间,等下我们要和mapper接口对应起来,这个需要一一对应,当然如果不使用接口的方式,这个命名空间就可以随意命名,当然根据一定的规范命名比较好,毕竟我们如果需要打印有关SQL语句的日志的话需要用到这个命名空间
3.创建Mapper接口,这时接口的命全类名就应该和上面xml文件的命名空间一样,接口中的方法名和xml文件中的sql文的Id相同,返回值和resultMap的值相同,如果返回的结果有多个,那么就需要返回List集合,方法的参数和parameterType的值相同
package com.ecjtu.spring.IOperation;import java.util.List;import com.ecjtu.spring.bean.User;public interface UserOperation { public User getUserById(Integer userId); public List<User> selectUserByDept(Integer deptId);}
4.创建ServiceImpl实现类,这里是通过Spring注解来配置Bean的
package com.ecjtu.spring.servicesImpl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.ecjtu.spring.IOperation.UserOperation;import com.ecjtu.spring.bean.User;import com.ecjtu.spring.services.IUserService;@Service("userService")public class UserServiceImpl implements IUserService{ @Autowired private UserOperation userDao; public User getUserById(Integer userId) { return userDao.getUserById(userId); }}
5.接下来就可以测试了,创建Test.java类:
package com.ecjtu.test;import java.util.List;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.ecjtu.spring.IOperation.UserOperation;import com.ecjtu.spring.bean.User;import com.ecjtu.spring.services.IUserService;public class Test { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //通过Spring拿到sessionFactory创建session SqlSessionFactory sessionFactory = (SqlSessionFactory) context.getBean("sqlSessionFactory"); SqlSession session = sessionFactory.openSession(); //根据Mapper接口中的方法来查询数据, UserOperation userOperation = session.getMapper(UserOperation.class); User user = userOperation.getUserById(1001); System.out.println(user.getUsername() + "111"); //根据xml文件中id来查询数据 List<User> users = session.selectList("selectUserByDept", 2001); for(User user3 : users){ System.out.println(user3.getUsername()); } //和Spring结合后可以利用Spring来为我们创造Mapper接口 UserOperation userOperation2 = context.getBean("userOperation",UserOperation.class); User user2 = userOperation2.getUserById(1001); System.out.println(user2.getUsername() + "222"); //通过spring注解配置了service,拿到service再去操作数据库 IUserService userService = context.getBean("userService", IUserService.class); User user4 = userService.getUserById(1001); System.out.println(user4.getUsername() + "444"); }}
注:里面的注解应该挺清晰的了,主要是先通过Spring来拿到SqlSessionFactory,再通过它来创建SqlSession,拿到Session就可以随意操作数据库了
##下面是测试项目的整体结构图
- MyBatis和Spring相结合-环境搭建
- spring mybatis 搭建环境
- Struts2+Spring+Mybatis环境搭建
- Spring+SpringMVC+myBatis环境搭建
- 搭建Springmvc+Mybatis+Spring环境
- Spring MVC + Mybatis 环境搭建
- Spring、Spring MVC、Mybatis开发环境搭建
- MyBatis简介和环境搭建
- Spring与MyBatis搭建集成环境
- Maven+Spring+SpringMVC+MyBatis搭建环境心得
- maven+spring+springMVC+mybatis环境搭建
- Spring与Mybatis整合环境搭建
- Spring MVC+mybatis 环境搭建,总结
- 搭建maven+spring+freemaker+mybatis环境之一
- Spring Boot + Mybatis + Log4j2开发环境搭建
- STS +Maven+ SpringMVC+Spring+Mybatis 搭建环境
- Spring Boot 引入 Mybatis 环境搭建
- Idea+Maven+Spring+SpringMVC+MyBatis环境搭建
- 迭代器
- 云计算基本概念
- mybatis缓存管理
- BLE的隐私保护
- bzoj 1975: [Sdoi2010]魔法猪学院 (k短路)
- MyBatis和Spring相结合-环境搭建
- SpringMVC详细示例实战教程
- CSS学习笔记8:实操——运用浮动简单布局网页
- C++函数新亮点
- Nginx配置静态文件服务
- SSM+Mysql+EasyUI增删改查案例
- Android通过AIDL远程调用service
- HEXO+Github,搭建属于自己的博客
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)(转)