SpringBoot集成mybatis以及使用mybtis逆向生成插件

引入依赖

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
       

配置文件application.properties

# mybatis
mybatis.type-aliases-package=com.example.miaosha_xdp.entity
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.default-fetch-size=100
mybatis.configuration.default-statement-timeout=3000
mybatis.mapperLocations = classpath:mapper/*.xml
# 数据源
spring.datasource.url=jdbc:mysql://xdp:3306/miaosha?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

使用mybatis逆向生成工具

引入MyBatis Generator的maven插件

<build>
    <plugins>
        <!--mybatis自动生成代码插件-->
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.6</version>
            <configuration>
                <!-- 是否覆盖,true表示会替换生成的JAVA文件,false则不覆盖 -->
                <overwrite>true</overwrite>
            </configuration>
            <dependencies>
                <!--mysql驱动包-->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.45</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

在resource目录下新建插件的配置文件generatorConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>

    <!-- defaultModelType="flat" 设置复合主键时不单独为主键创建实体 -->
    <context id="MySql" defaultModelType="flat">
        <!-- 生成的POJO实现java.io.Serializable接口 -->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />

        <!--注释-->
        <commentGenerator>
            <!-- 将数据库中表的字段描述信息添加到注释 -->
            <property name="addRemarkComments" value="true"/>
            <!-- 注释里不添加日期 -->
            <property name="suppressDate" value="true"/>
        </commentGenerator>
        <!-- 数据库连接 -->
        <jdbcConnection
                driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://xdp:3306/miaosha"
                userId="root"
                password="123456"/>

        <!-- 生成POJO对象,并将类放到com.songguoliang.springboot.entity包下 -->
        <javaModelGenerator targetPackage="com.example.miaosha_xdp.entity" targetProject="src/main/java"></javaModelGenerator>
        <!-- 生成mapper xml文件,并放到resources下的mapper文件夹下 -->
        <sqlMapGenerator targetPackage="mapper"  targetProject="src/main/resources"></sqlMapGenerator>


        <!-- 生成mapper xml对应dao接口,放到com.songguoliang.springboot.mapper包下-->
        <javaClientGenerator targetPackage="com.example.miaosha_xdp.mapper" targetProject="src/main/java" type="XMLMAPPER"></javaClientGenerator>

        <!-- table标签可以有多个,至少一个,tableName指定表名,可以使用_和%通配符 -->
        <table tableName="miaosha_user">
            <!-- 是否只生成POJO对象 -->
            <property name="modelOnly" value="false"/>
            <!-- 数据库中表名有时我们都会带个前缀,而实体又不想带前缀,这个配置可以把实体的前缀去掉 -->
            <domainObjectRenamingRule searchString="^Miaosha" replaceString=""/>

        </table>
    </context>
</generatorConfiguration>

 

进行逆向生成 

如下图点击maven插件中的mybatis-generator:generate,就为我们自动成了pojo类,映射类和映射的XML文件

mybtis逆向生成插件相关说明

创建实例的过程中有一个以Example结尾的类,这个类是专门用来对这个单表来查询的类,就相当于,对该单表的增删改查是脱离sql性质的,直接在service层就可以完成(当然这个sql是逆向已经生过的)

例如:

select id, username, birthday, sex, address from user WHERE ( username = ‘张三’ ) order by username asc

@Test
    public void testFindUserByName(){
 
        //通过criteria构造查询条件
        UserExample userExample = new UserExample();
        userExample.setOrderByClause("username asc"); //asc升序,desc降序排列
        userExample.setDistinct(false); //去除重复,true是选择不重复记录,false反之
        UserExample.Criteria criteria = userExample.createCriteria(); //构造自定义查询条件
        criteria.andUsernameEqualTo("张三");
 
        //自定义查询条件可能返回多条记录,使用List接收
        List<User> users = userMapper.selectByExample(userExample);
 
        System.out.println(users);
    }
说明:
Mybatis逆向工程会生成实例及实例对应的example(用于添加条件,相当于where后的部分)
xxxExample example = new xxxExample();
Criteria criteria = example.createCriteria();
方法说明:
// 1.添加升序排列条件,DESC为降序
example.setOrderByClause("字段名ASC")
// 2.去除重复,boolean类型,true为选择不重复的记录
example.setDistinct(false)
// 3.添加字段xxx为null的条件
criteria.andXxxIsNull
// 4.添加字段xxx不为null的条件
criteria.andXxxIsNotNull
// 5.添加xxx字段等于value条件
criteria.andXxxEqualTo(value)
// 6.添加xxx字段不等于value条件
criteria.andXxxNotEqualTo(value)
// 7.添加xxx字段大于value条件
criteria.andXxxGreaterThan(value)
// 8.添加xxx字段大于等于value条件
criteria.andXxxGreaterThanOrEqualTo(value)
// 9.添加xxx字段小于value条件
criteria.andXxxLessThan(value)
// 10.添加xxx字段小于等于value条件
criteria.andXxxLessThanOrEqualTo(value)
// 11.添加xxx字段值在List
criteria.andXxxIn(List)
// 12.不添加xxx字段值在List
criteria.andXxxNotIn(List)
// 13.添加xxx字段值在之间
criteria.andXxxBetween(value1,value2)
// 14.添加xxx字段值不在之间
criteria.andXxxNotBetween(value1,value2)

 

测试结果

service层

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
    public void addUser(User user){
        userMapper.insert(user);
    }
}

contoller层

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/insert")
    public String addUser(@RequestBody User user) {
        userService.addUser(user);
        return "success";
    }
}

启动类配置扫包@MapperScan

package com.example.miaosha_xdp;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.miaosha_xdp.mapper")
public class MiaoshaXdpApplication {

    public static void main(String[] args) {
        SpringApplication.run(MiaoshaXdpApplication.class, args);
    }
}

进行测试

在数据库中可以看到测试成功

测试事务

service层添加方法

public void addUserTansnational(){
        User user1 = new User();
        User user2 = new User();

        user1.setId(88L);
        user1.setNickname("kobe");

        user2.setId(66L);
        user2.setNickname("yaoming");
        userMapper.insert(user1);
        userMapper.insert(user2);
    }

controlle层添加方法

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/insert")
    public String addUser(@RequestBody User user) {
        userService.addUser(user);
        return "success";
    }

    @GetMapping("/Transactional")
    public String Transactional() {
        userService.addUserTansnational();
        return "success";
    }
}

测试

可以发现事务没有回滚

在service层方添加事务注解

@Service
@Transactional
public class UserService {
    @Autowired
    private UserMapper userMapper;
    public Integer addUser(User user){
        return userMapper.insert(user);
    }
    public void addUserTansnational(){
        User user1 = new User();
        User user2 = new User();

        user1.setId(88L);
        user1.setNickname("kobe");

        user2.setId(66L);
        user2.setNickname("yaoming");
        userMapper.insert(user1);
        userMapper.insert(user2);
    }
}

再次测试可以看到回滚成功

 

猜你喜欢

转载自blog.csdn.net/weixin_42545256/article/details/84895285