spring boot 集成 mybatis

一、自动生成代码

1、maven依赖

<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>2.0.1</version>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>


		<!--mybatis 自动生成插件-->
		<dependency>
			<groupId>org.mybatis.generator</groupId>
			<artifactId>mybatis-generator-core</artifactId>
			<version>1.3.5</version>
		</dependency>

mybatis代码生成插件

<plugin>
		<groupId>org.mybatis.generator</groupId>
		<artifactId>mybatis-generator-maven-plugin</artifactId>
		<version>1.3.2</version>
		<configuration>
            <!-- 生成代码的配置文件-->
			<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml
        </configurationFile>
		<overwrite>true</overwrite>
		<verbose>true</verbose>
		</configuration>
</plugin>

2、些许配置  application.yml

这里注意自己的数据库链接驱动,版本不同,配置会稍有不同,

spring:
#  datasource:
#    driverClassName: com.mysql.cj.jdbc.Driver
#    url: jdbc:mysql://localhost:3306/mfgw?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
#    username: root
#    password: root
#mysql-connector-java 6及以上

  datasource:
    driverClassName: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mfgw?useUnicode=true&characterEncoding=utf8
    username: root
    password: root
#mysql-connector-java 5



# MyBatis
mybatis:
    # 搜索指定包别名
    typeAliasesPackage: com.manful.mfgw
    # 配置mapper的扫描,找到所有的mapper.xml映射文件
    mapperLocations: classpath:mapping/*Mapper.xml

# PageHelper
pagehelper:
  #分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helperDialect属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值:
     #oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby
  helperDialect: mysql
  #分页参数合理化  启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页
  reasonable: true
#  支持通过 Mapper 接口参数来传递分页参数,默认值false
  supportMethodsArguments: true
  params: count=countSql 

生成代码的配置文件 generatorConfig.xml(文件的位置与前面pom文件中配置的一致即可)

<?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>
    <!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
    <classPathEntry  location="D:\mysql-connector-java-5.1.46.jar"/>
    <context id="DB2Tables"  targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--数据库链接URL,用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1/mfgw" userId="root" password="root">
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- 生成模型的包名和位置-->
        <javaModelGenerator targetPackage="com.manful.mfgw.pojo" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- 生成映射文件的包名和位置-->
        <sqlMapGenerator targetPackage="resources.mapping" targetProject="src/main">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 生成DAO的包名和位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.manful.mfgw.dao" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        <table tableName="t_article" domainObjectName="Article" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">

            <!--当表中有Text类型的字段时,generator会生成WithBLOBS.java文件并继承entity,同时具有带有text等类型字段的属性。想要将这两个属性合并到entity中需要在xml添加如下配置即可,这样就不会生成WithBLOBS.java文件了-->
            <columnOverride column="content" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="html_content" javaType="java.lang.String" jdbcType="VARCHAR" />
        </table>
        <table tableName="t_person" domainObjectName="Person" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
        <table tableName="t_pic" domainObjectName="Pic" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
        <table tableName="t_product" domainObjectName="Product" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
            <columnOverride column="sub_images" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="detail" javaType="java.lang.String" jdbcType="VARCHAR" />

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

注意,该配置中需要修改几个地方,1、修改本地数据库连接驱动的地址  2、数据库连接的信息   3、生成mapper,实体类的包名    4、实体类和数据库表对应的配置     5、当表中有Text类型的字段时,generator会生成WithBLOBS.java文件并继承entity,同时具有带有text等类型字段的属性。想要将这两个属性合并到entity中需要在xml添加相应配置(见上面文件)。

 

(前提数据库表都创建好了)然后,就可以生成生成 pojo 和 dao 了

数据库表:

二、简单的增删改查

现在已经生成dao层的代码了,测试一下是否能用

首先向数据库中插入一条数据

然后不要忘了在启动类上加上注解来扫描我们的mapper 

@MapperScan("com.xxx.xxx.dao")

写一个controller,来测试一下,这里偷懒了一下,没有写service层

@Controller
public class MainController {

    @Autowired
    private PersonMapper personMapper;

    @RequestMapping("/test")
    public String test1(ModelMap map){
        Person person = personMapper.selectByPrimaryKey(1);
        map.put("person",person);
        return "test";
    }
}

页面成功取到,成功,

这里测试的mapper的   personMapper.selectByPrimaryKey() 方法时生成器自动帮我们生成的,xml形式的mapper

如果在已有的mapper里使用注解的方式能行吗?试试看

public interface PersonMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(Person record);

    int insertSelective(Person record);

    Person selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(Person record);

    int updateByPrimaryKey(Person record);

    @Select(value = "select * from t_person")
    List<Person> findAll();

}

controller修改:这次调用的时使用注解的那个方法

    @RequestMapping("/test")
    public String test1(ModelMap map){
//        Person person = personMapper.selectByPrimaryKey(1);
//        map.put("person",person);

        Person person = personMapper.findAll().get(0);
        map.put("person",person);

        return "test";
    }

测试:

成功显示出来了,可以看出,是可行的,

三、pagehelper 分页

添加依赖,三个缺一不可

        <dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper</artifactId>
			<version>5.0.0</version>
		</dependency>
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper-spring-boot-autoconfigure</artifactId>
			<version>1.2.3</version>
		</dependency>
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper-spring-boot-starter</artifactId>
			<version>1.2.3</version>
		</dependency>

可选配置;

application.yml

# PageHelper
pagehelper:
  #分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helperDialect属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值:
     #oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby
  helperDialect: mysql
  #分页参数合理化  启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页
  reasonable: true
#  支持通过 Mapper 接口参数来传递分页参数,默认值false
  supportMethodsArguments: true
  params: count=countSql 

用法如下,pageinfo对象一般能满足我们的需求了,当然也可以自行把数据进行封装

@RunWith(SpringRunner.class)
@SpringBootTest
public class MfgwApplicationTests {

	@Autowired
	PersonMapper personMapper;

	@Test
	public void contextLoads() {

		PageHelper.startPage(1,4);
		List<Person> personList = personMapper.findAll();

		PageInfo pageInfo = new PageInfo(personList);

		List list = pageInfo.getList();  //封装数据的list

		int pageNum = pageInfo.getPageNum();  //当前页码

		int pageSize = pageInfo.getPageSize();  //每页几条记录

		int size = pageInfo.getSize();  //

		int pages = pageInfo.getPages(); //总页数
		
		long total = pageInfo.getTotal();  //总记录数
	}
}

debug 运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值