spring+mybatis
来源:互联网 发布:陶哲轩智商知乎 编辑:程序博客网 时间:2024/04/29 21:06
spring整合mybatis
整合框架就是搭建环境,但是,特么搭建环境比开发更头疼,一不小心就特么报错,在网上搜的都好复杂,包含了全部配置(看着就头大)。我这个配置是简单版的,适合像我一样的初学者。
我是用maven创建的项目,先把pom.xml贴上来。(请忽略)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.gcl.spring-mybatis</groupId> <artifactId>sm</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>sm</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <dbcp.version>1.4</dbcp.version> <spring.version>4.0.6.RELEASE</spring.version> <mysql.version>5.1.38</mysql.version> <slf4j.api.version>1.7.5</slf4j.api.version> </properties> <dependencies> <!-- http://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- http://mvnrepository.com/artifact/org.mybatis/mybatis-spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <dependency><!-- spring上下文用spring-jdbc连接数据库 --> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency><!-- dataSource是BasicDataSource的实例 --> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>${dbcp.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <!-- Database driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- mybatis启动要加载log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies></project>
先搭建个环境
// 一个账户的接口,mybatis可以通过接口直接生成代理类public interface IAccount { @Select({"select * from account"}) public List<Account> getAll(); @Select({"select * from account where id=#{id}"}) public Account get(int id); @Delete({"delete from account where id=#{id}"}) public void delete(int id); @Insert({"insert into account(name, money) values(#{name}, #{money})"}) public void add(Account acc);}// Account beanpublic class Account { private int id; private String name; private int money; // 构造函数 ... // toString方法 ... // setter & getter ...}
我们要做的就是对账户的操作
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" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!-- 扫描包 --> <context:component-scan base-package="com.gcl.spring_mybatis.*"></context:component-scan> <!-- 配置数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/gcl?characterEncoding=utf8" /> <property name="username" value="root" /> <property name="password" value="" /> </bean> <!-- 配置sqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /><!-- 数据源 --> <property name="configLocation" value="classpath:spring-mybatis.xml" /><!-- 配置文件 --> </bean> <!-- 映射IAccount接口 --> <!-- 这样会在spring容器里直接生成代理类的实例,可以在service中注入 --> <bean id="accountMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> <property name="mapperInterface" value="com.gcl.spring_mybatis.sm.IAccount" /> </bean></beans>
先停下来理清思路
单独使用mybatis的时候,我们是这样做的:
得到初始化SqlSessionFactory(spring已初始化)
打开sqlSession
由 sqlSession.getMapper(xxx.class); 得到代理类 (spring已生成代理类并放入容器中,使用时直接注入)
通过dao代理类操作(表面上通过接口操作)
清楚了吧,配置好后什么都不用管了,相关类实例的生成spring全包了
下面写个服务类
@Servicepublic class AccountSer { @Autowired // 直接注入就行,实例已存在于spring容器中 private IAccount mapper; public void getAll() { System.out.println(mapper.getAll()); } public void insert(Account a) { mapper.add(a); }}
spring-mybatis.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> <!-- 以前我们是需要配置数据源,在<enviroment></enviroment>中 --> <!-- 以前我们也需要配置mapper映射 --> <!--<mappers> --> <!-- <mapper class="com.gcl.spring_mybatis.sm.IAccount" /> --> <!--</mappers> --> </configuration> <!-- 配置文件好像空了 --> <!-- 实际上在spring的配置文件中去掉mybatis的配置文件也不会错 -->
接口扫描
- 如果写了好多接口,还需要一个个的在spring配置文件中配置吗?
<!-- 或许需要这样 --><!-- spring会扫描包下的类,如果发现有mybatis的dao接口类,就会生成代理类并放入spring容器 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.gcl.spring_mybatis.sm"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean>
现在可以去掉上面spring配置文件中的接口映射配置了(下面的代码)
<!-- 可以去掉了 --><bean id="accountMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> <property name="mapperInterface" value="com.gcl.spring_mybatis.sm.IAccount" /></bean>
使用dao的时候像上面一样就行,直接注入
@Servicepublic class AccountSer { @Autowired private IAccount mapper; public void getAll() { System.out.println(mapper.getAll()); } public void insert(Account a) { mapper.add(a); }}
还缺少了事务和缓存的配置
0 0
- SPRING+MYBATIS
- mybatis + spring
- mybatis + spring
- Spring MyBatis
- spring mybatis
- spring+mybatis
- spring+mybatis
- mybatis+spring
- MyBatis+Spring
- Mybatis-Spring
- spring+mybatis
- spring+mybatis
- Spring+MyBatis
- spring-mybatis
- Spring+Mybatis
- mybatis+Spring
- Mybatis+Spring
- spring-mybatis
- 常用汽车维修保养小知识——电瓶的养护
- C++【常见面试题】String类的实现,以及深拷贝、浅拷贝问题
- 【笔试常考】C语言:深度剖析strlen,sizeof
- android使用获取所有应用的资源id和uri
- 【C语言】注释不可以嵌套使用的举例
- spring+mybatis
- 【C语言】局部变量、全局变量,局部静态变量,全局静态变量,extern,static的区别
- 【面试论述】const的作用、使用举例与#define联系
- maven学习(2):常用命令及tomcat插件和jetty插件部署
- 【C语言】break,continue的区别
- Android 文字滚动
- 【C语言】从标准输入读取字符,所有非字母字符完全按照输入形式输出,字母字符在输出前加密
- Android Service完全解析,关于服务你所需知道的一切(下)
- cherryPY 入门