Spring boot 和 mybatis 学习笔记1--框架整合

版权声明:本文为博主原创文章,未经博主允许不得转载。 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


3.注入SqlSessionFactory,SqlSessionTemplate以及事务
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);
}


6.与Dao 接口对应的mybatis 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.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.项目结构



9.测试
访问:默认为8080端口


    

直接访问,流程跑通。。。完结

后续会继续学习mybatis相关特性,待续


参考:http://blog.csdn.net/isea533/article/details/50359390


 

猜你喜欢

转载自blog.csdn.net/tianhongqiang/article/details/57082946