spring boot 集成 mybatis

    xiaoxiao2022-07-07  186

    一、自动生成代码

    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 运行结果

    最新回复(0)