版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tianhongqiang/article/details/57082946
之前做开发,一直使用spring jdbc 对db操作,近期萌生了学习一下当前比较流行的持久化框架中较为小巧,简单的ORM持久化框架:mybatis 框架,作,这样可以有机会在以后的项目中加以运用,进而也能增加自个的技术储备。(Hibernate 以后有时间在学习)。
进入正题:
1.spring boot +mybatis 依赖文件 ,数据源采用阿里巴巴的durid。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.0.0</version>
</dependency>
<!-- mysql 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.28</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2.配置数据源 spring boot 必须配置数据源 ,默认使用org.apache.tomcat.jdbc.pool.DataSource 具体查看:org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder ,如更改dataSource 则设置type参数
本项目是在application.yml文件中,如需要切换dev ,test,prod 则需要application-dev.yml application-test.yml application-prod.yml
spring:
datasource:
name: my
url: jdbc:mysql://127.0.0.1:3306/my
username: root
password: 123
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
filters: stat
maxActive: 20
initialSize: 1
maxWait: 60000
minIdle: 1
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 20
package com.thq.mybatis.config;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;
import com.github.pagehelper.PageHelper;
@Configuration
@EnableTransactionManagement //等价于<tx:annotation-driven />
public class MybatisConfig implements TransactionManagementConfigurer{
@Autowired
DataSource dataSource;
@Bean(name = "sqlSessionFactory")
public SqlSessionFactory sqlSessionFactoryBean() {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setTypeAliasesPackage("com.thq.mybatis.model");
//分页插件
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("reasonable", "true");
properties.setProperty("supportMethodsArguments", "true");
properties.setProperty("returnPageInfo", "check");
properties.setProperty("params", "count=countSql");
pageHelper.setProperties(properties);
//添加插件
Interceptor[] interceptors = {pageHelper};
bean.setPlugins(interceptors);
//添加XML目录
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
bean.setMapperLocations(resolver.getResources("classpath:mybatis/mapper/*.xml"));
return bean.getObject();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean
@Override
public PlatformTransactionManager annotationDrivenTransactionManager() {
return new DataSourceTransactionManager(dataSource);
}
}
将数据源注入到SqlSessionFactory
4.model
package com.thq.mybatis.model;
public class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
5.dao接口
package com.thq.mybatis.dao;
import com.thq.mybatis.model.User;
public interface UserDao {
public User selectUserById(int id);
}
<?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.thq.mybatis.dao.UserDao">
<select id="selectUserById" resultType="com.thq.mybatis.model.User">
select * from tb_user where id = #{id,jdbcType=NUMERIC}
</select>
</mapper>
注:mapper 中 namespace 属性 必须为对应dao 接口的全路径 ,否则会报异常
select 中Id必须为Dao中对应的方法名
7.controller (省略了service层)
package com.thq.mybatis.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.google.gson.Gson;
import com.thq.mybatis.dao.UserDao;
import com.thq.mybatis.model.User;
@Controller
@RequestMapping("/test")
public class UserController {
@Autowired
private UserDao userMapper;
@RequestMapping("/index")
@ResponseBody
public String test(){
User user = userMapper.selectUserById(1);
Gson gson =new Gson();
String userStr = gson.toJson(user);
return "spring boot mybatis :"+userStr;
}
}
7.启动
package com.thq.mybatis;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan
@EnableAutoConfiguration
@ComponentScan("com.thq.mybatis")
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class);
}
}
8.项目结构
访问:默认为8080端口
直接访问,流程跑通。。。完结
后续会继续学习mybatis相关特性,待续
参考:http://blog.csdn.net/isea533/article/details/50359390