Skip to content

Commit

Permalink
新增mybatis全注解使用案例
Browse files Browse the repository at this point in the history
  • Loading branch information
happyxiaofan committed Sep 14, 2017
1 parent 50b5525 commit c503400
Show file tree
Hide file tree
Showing 14 changed files with 583 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Expand Up @@ -39,6 +39,7 @@ Github地址:https://github.com/happyxiaofan

4. 数据库
* spring-boot-mybatis(mybatis使用快速入门)
* spring-boot-mybatis-annotation(mybatis全注解使用示例)
* spring-boot-mybatis-multidatasource(mybatis多数据库解决方案)
* spring-boot-mybatis-sharding-jdbc(使用sharding-jdbc对数据库进行分库分表)

Expand Down
5 changes: 5 additions & 0 deletions docs/sql/springboot/spring-boot-mybatis.sql
Expand Up @@ -7,3 +7,8 @@ CREATE TABLE `user` (
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='用户信息表';

ALTER TABLE `springboot`.`user`
CHANGE COLUMN `user_id` `user_id` BIGINT(20) NOT NULL COMMENT '用户id' ,
ADD UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC);

1 change: 1 addition & 0 deletions pom.xml
Expand Up @@ -27,6 +27,7 @@

<!-- 数据库使用 -->
<module>spring-boot-mybatis</module>
<module>spring-boot-mybatis-annotation</module>
<module>spring-boot-mybatis-sharding-jdbc</module>
<module>spring-boot-mybatis-multidatasource</module>

Expand Down
62 changes: 62 additions & 0 deletions spring-boot-mybatis-annotation/pom.xml
@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>spring-boot-learning-examples</artifactId>
<groupId>com.rhwayfun</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>

<artifactId>spring-boot-mybatis-annotation</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,19 @@
package com.rhwayfun.springboot.mybatis.annotation;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
* 程序入口
*
* @author happyxiaofan
* @since 0.0.1
*/
@SpringBootApplication
public class Application {

public static void main(String[] args) throws InterruptedException {
SpringApplication.run(Application.class, args);
Thread.sleep(Long.MAX_VALUE);
}
}
@@ -0,0 +1,85 @@
package com.rhwayfun.springboot.mybatis.annotation.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.rhwayfun.springboot.mybatis.annotation.constants.DataSourceConstants;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

/**
* 数据源配置
*
* @author happyxiaofan
* @since 0.0.1
*/
@Configuration
@ConfigurationProperties(prefix = DataSourceConstants.DATASOURCE_PREFIX)
@MapperScan(basePackages = { DataSourceConstants.MAPPER_PACKAGE }, sqlSessionFactoryRef = "mybatisSqlSessionFactory")
public class DataSourceConfig {

private String url;

private String username;

private String password;

@Bean(name = "mybatisDataSource")
public DataSource mybatisDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(DataSourceConstants.DRIVER_CLASS);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}

@Bean(name = "mybatisTransactionManager")
public DataSourceTransactionManager mybatisTransactionManager() {
return new DataSourceTransactionManager(mybatisDataSource());
}

@Bean(name = "mybatisSqlSessionFactory")
public SqlSessionFactory mybatisSqlSessionFactory(@Qualifier("mybatisDataSource") DataSource mybatisDataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(mybatisDataSource);
/**
* 这里不需要指定Mapper.xml的配置文件的路径,因为我们例子都是基于注解完成的,没有Mapper.xml配置文件
*/
/*sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(DataSourceConstants.MAPPER_LOCATION));*/
return sessionFactory.getObject();
}

public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

}
@@ -0,0 +1,29 @@
package com.rhwayfun.springboot.mybatis.annotation.constants;

/**
* 数据源相关常量
*
* @author happyxiaofan
* @since 0.0.1
*/
public abstract class DataSourceConstants {

/**
* 数据源配置前缀
*
*/
public static final String DATASOURCE_PREFIX = "mybatis.datasource";

/**
* MySQL驱动
*
*/
public static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";

/**
* Mybatis Mapper接口路径
*
*/
public static final String MAPPER_PACKAGE = "com.rhwayfun.springboot.mybatis.annotation.mapper";

}
@@ -0,0 +1,23 @@
package com.rhwayfun.springboot.mybatis.annotation.constants;

/**
* Sql语句
*
* @author happyxiaofan
* @since 0.0.1
*/
public abstract class SqlConstants {

public static final String GET_ALL_SQL = "SELECT * FROM user";

public static final String GET_ONE_SQL = "SELECT * FROM user WHERE user_id = #{userId}";

public static final String INSERT_SQL = "INSERT INTO user(user_id,user_name,age,birth) VALUES(#{userId}, #{userName}, #{age}, #{birth})";

public static final String UPDATE_SQL = "UPDATE user SET user_name=#{userName},age=#{age},birth=#{birth} WHERE user_id =#{userId}";

public static final String DELETE_SQL = "DELETE FROM user WHERE user_id =#{userId}";

public static final String DELETE_ALL_SQL = "DELETE FROM user";

}
@@ -0,0 +1,62 @@
package com.rhwayfun.springboot.mybatis.annotation.constants;

import java.util.Map;

import static org.apache.ibatis.jdbc.SqlBuilder.*;

/**
* Sql语句生成器
*
* @author happyxiaofan
* @since 0.0.1
*/
public class UserSqlProvider {

private static final String TABLE_NAME = "user";

public String findOneSql(Map<String, Object> parameters) {
Long userId = (Long) parameters.get("userId");
BEGIN();
SELECT("user_id, user_name, age, birth");
FROM(TABLE_NAME);
if (userId != null) {
WHERE("user_id = #{userId}");
}
return SQL();
}

public String findAllSql() {
BEGIN();
SELECT("user_id, user_name, age, birth");
FROM(TABLE_NAME);
return SQL();
}

public String insertSql() {
BEGIN();
INSERT_INTO(TABLE_NAME);
VALUES("user_id", "#{userId}");
VALUES("user_name", "#{userName}");
VALUES("age", "#{age}");
VALUES("birth", "#{birth}");
return SQL();
}

public String updateSql() {
BEGIN();
UPDATE(TABLE_NAME);
SET("user_name = #{userName}");
SET("age = #{age}");
SET("birth = #{birth}");
WHERE("user_id = #{userId}");
return SQL();
}

public String deleteSql() {
BEGIN();
DELETE_FROM(TABLE_NAME);
WHERE("user_id = #{userId}");
return SQL();
}

}
@@ -0,0 +1,76 @@
package com.rhwayfun.springboot.mybatis.annotation.entity;

import java.io.Serializable;
import java.util.Date;

/**
* 用户实体类,纯POJO
*
* @author happyxiaofan
* @since 0.0.1
*/
public class UserEntity implements Serializable {

private Integer id;

private Long userId;

private String userName;

private Integer age;

private Date birth;

private static final long serialVersionUID = 1L;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public Long getUserId() {
return userId;
}

public void setUserId(Long userId) {
this.userId = userId;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public Date getBirth() {
return birth;
}

public void setBirth(Date birth) {
this.birth = birth;
}

@Override
public String toString() {
return "UserEntity{" +
"id=" + id +
", userId=" + userId +
", userName='" + userName + '\'' +
", age=" + age +
", birth=" + birth +
'}';
}
}

0 comments on commit c503400

Please sign in to comment.