- 数据库选择
当前主流的关系型数据库有MySQL、Oracle和SQL Server等,出于成本、拓展性、安全性、健壮性等的考虑,我们使用MySQL作为我们的数据库,在pom文件中引入依赖
<!-- 添加mysql数据库支持 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
引入依赖后,再在application.yml中添加数据库相关配置即可
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password:
- ORM框架选择
成功连接数据库后,我们还需要对数据库进行CURD操作,一般我们都是通过ORM框架去实现
ORM框架的目的就是为了简化编程中操作数据库的编码,现在主流的2个就是Hibernate和Mybatis了,有一个大致的规律是传统大型软件企业喜欢使用宣传可以不用写一句SQL的Hibernate,互联网企业喜欢使用可以灵活调试动态SQL的Mybatis。由于我们公司一直使用Mybatis,所以还是使用Mybatis作为ORM框架
Mybatis有两种开发方式:DAO开发方式和Mapper开发方式
Mapper开发方式又支持注解和xml,为了满足以往的开发习惯(xml写法)并且给未来可能使用的基于注解留下空间,所以采用Mapper开发方式。在这种情况下,要使用Mybatis,需要实体类、Mapper接口类、xml文件等的支持才能正常使用,所以我们使用Mybatis提供的generator工具进行生成,具体如下
1、引入依赖和插件,在pom.xml中增加以下内容
<properties>
<org.mybatis.spring.boot.version>1.3.1</org.mybatis.spring.boot.version>
<tk.mybatis.mapper.spring.boot.version>1.1.5</tk.mybatis.mapper.spring.boot.version>
<!-- 插件版本 -->
<org.mybatis.generator.version>1.3.5</org.mybatis.generator.version>
<tk.mybatis.mapper.version>3.4.0</tk.mybatis.mapper.version>
</properties>
<dependencies>
<!--添加mybatis依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${org.mybatis.spring.boot.version}</version>
</dependency>
<!--通用mapper-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>${tk.mybatis.mapper.spring.boot.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!--Mybatis-generator插件,用于自动生成Mapper和POJO-->
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>${org.mybatis.generator.version}</version>
<configuration>
<!--配置文件的位置-->
<configurationFile>
${basedir}/src/main/resources/generator/mybatis-generator-config.xml
</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>${tk.mybatis.mapper.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
2、新建generator配置文件
依照刚才的Maven插件中配置的地址,新建mybatis-generator-config.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>
<!--执行generator插件生成文件的命令: call mvn mybatis-generator:generate -e -->
<!-- 引入配置文件 -->
<!-- <properties resource="mybatis-generator/mybatisGeneratorinit.properties"/> -->
<!--classPathEntry:数据库的JDBC驱动,换成你自己的驱动位置 可选 -->
<!--<classPathEntry location="D:\generator_mybatis\mysql-connector-java-5.1.24-bin.jar" /> -->
<!-- 一个数据库一个context -->
<!--defaultModelType="flat" 大数据字段,不分表 -->
<context id="MysqlTables" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表;
一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖 -->
<property name="autoDelimitKeywords" value="true" />
<!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
<property name="beginningDelimiter" value="`" />
<property name="endingDelimiter" value="`" />
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="tk.mybatis.mapper.common.Mapper,tk.mybatis.mapper.common.MySqlMapper" />
</plugin>
<!-- 注释 -->
<commentGenerator >
<property name="suppressAllComments" value="false"/><!-- 是否取消注释 -->
<property name="suppressDate" value="true" /> <!-- 是否生成注释代时间戳-->
</commentGenerator>
<!-- jdbc连接 -->
<jdbcConnection
driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf-8"
userId="root" password="" />
<!-- 类型转换 -->
<javaTypeResolver>
<!-- 是否使用bigDecimal, 默认为false,会自动转换decimal、numeric字段 -->
<!-- 默认转换规则:精度>0或长度>18-bigDecimal -->
<property name="forceBigDecimals" value="true"/>
</javaTypeResolver>
<!-- 生成实体类地址 -->
<javaModelGenerator targetPackage="com.example.demo.entity.mapping" targetProject="src/main/java/" >
<property name="enableSubPackages" value="false"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成mapxml文件 -->
<sqlMapGenerator targetPackage="com.example.demo.mapper.mapper" targetProject="src/main/java/" >
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- 生成mapxml对应client,也就是接口dao -->
<javaClientGenerator targetPackage="com.example.demo.mapper" targetProject="src/main/java/" type="XMLMAPPER" >
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- table可以有多个,每个数据库中的表都可以写一个table,tableName表示要匹配的数据库表,也可以在tableName属性中通过使用%通配符来匹配所有数据库表,只有匹配的表才会自动生成文件 -->
<!-- 是否生成方法的全部缺省值都为true -->
<table tableName="user_info"></table>
</context>
</generatorConfiguration>
3、准备工作
根据配置文件的设置,新建POJO类,mapper接口类、xml文件的存储目录
然后新建一个测试表,并初始化一条数据
CREATE TABLE `user_info` (
`id` varchar(32) NOT NULL COMMENT 'id',
`username` varchar(32) DEFAULT NULL COMMENT '用户名',
`password` varchar(64) DEFAULT NULL COMMENT '密码',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `demo`.`user_info` (`id`, `username`, `password`) VALUES ('1', '小汪', '123');
4、运行生成工具
如果你的开发环境是idea的话,点击右边的MavenProjects,选取Plugins中的mybatis-generator下运行mybatis-generator:generator
如果是MyEclipse,则右键项目,Run As:Maven build,输入mvn mybatis-generator:generate,点击运行即可
运行成功后,即可在对应目录看到生成的文件
如果是第一次使用MyEclips执行Maven命令,则需要先进行配置
Window→Preferences→选择Java→Installed JRES→选择你正在使用的jre→edit→在Default VM arguments一栏中填写
-Dmaven.multiModuleProjectDirectory=$M2_HOME→保存即可
5、测试Mybatis
在编写测试代码之前,我们还需要完善一些配置
①由于Mybatis的generator生成的mapper接口并没有在类上定义任何注解,如果要被Spring容器管理,若是给每一个mapper接口都加上注解太麻烦,所以通过@MapperScan即可统一解决
打开SpringBoot启动类DemoApplication,加上@MapperScan注解
@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@MapperScan注解的路径支持通配符
@MapperScan可注解多个路径,写法:@MapperScan({"com.example.demo.mapper","com.example.demo2.*.mapper"})
②添加扫描映射文件配置,打开application.yml文件,加入以下内容
mybatis:
mapper-locations: classpath:com/example/demo/mapper/mapper/*.xml
完善以上两个配置后,开始写测试功能,此处为了方便测试,就不对代码进行分层处理,统一写在controller里
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private UserInfoMapper userInfoMapper;
@RequestMapping("/mybatis")
public String mybatis(){
UserInfo userInfo = userInfoMapper.selectByPrimaryKey("1");
return new StringBuilder().append("用户名:").append(userInfo.getUsername()).toString();
}
}
启动项目,打开浏览器,访问localhost:9090/test/mybatis,结果如下,测试成功