IDEA使用记录
1、创建SpringBoot项目
使用默认,勾选web、MySql、JDBC、MyBatis、Thymeleaf。
pom.xml
文件不用修改,application.properties
删除,创建application.yml
文件。
配置文件中最好不要有中文注释,会报错。
spring:
#数据源配置
datasource:
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
server:
port: 8080
#公共配置与profiles选择无关
mybatis:
mapperLocations: classpath:mapper/*.xml
typeAliasesPackage: com.example.demo.model
创建数据库表user
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
如下结构添加文件
UserMapper.xml
文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
<select id="Listuser" resultType="com.example.demo.model.User">
select id, name, age,password from user;
</select>
</mapper>
UserMapper
接口文件
package com.example.demo.mapper;
import com.example.demo.model.User;
import java.util.List;
public interface UserMapper {
public List<User> Listuser();
}
UserController
文件
@RestController
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value="/入口",method = RequestMethod.GET)
public List<User> Listuser(){
return userService.Listuser();
}
}
UserService
文件(容易出问题,可能会报错,选择降低报错敏感度)
package com.example.demo.service;
import com.example.demo.mapper.UserMapper;
import com.example.demo.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserMapper userMapper; //可能会报错
public List<User> Listuser(){return userMapper.Listuser();}
}
启动Application
文件
package com.example.demo;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
@SpringBootApplication
@MapperScan("com.example.demo")
public class DemoApplication {
@Bean
@ConfigurationProperties(prefix="spring.datasource")
public DataSource dataSource() {
return new org.apache.tomcat.jdbc.pool.DataSource();
}
@Bean
public SqlSessionFactory sqlSessionFactoryBean() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mybatis/*.xml"));
return sqlSessionFactoryBean.getObject();
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
2、添加自动生成generator功能
pom.xml
文件添加代码,${basedir}/src/main/resources/generator/generatorConfig.xml
指定配置文件位置
<!-- mybatis generator 自动生成代码插件 -->
<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>
generatorConfig.xml
文件内容,JDBC路径在左边找到
<?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="C:\Users\THUND\.m2\repository\mysql\mysql-connector-java\8.0.15\mysql-connector-java-8.0.15.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.cj.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1/demo"
userId="root" password="123456">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成模型的包名和位置-->
<javaModelGenerator targetPackage="com.example.demo.model" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成映射文件的包名和位置-->
<sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.demo.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
<table tableName="user" domainObjectName="User" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
</table>
</context>
</generatorConfiguration>
启动中添加maven
commondline写:mybatis-generator:generate -e
名字写:generator
选择启动即可自动生成。
3、连接数据库时区异常
mysql8.0 需要将mysql-connector-java.jar换成8.0.11版本,然后将驱动改为com.mysql.cj.jdbc.Driver
,然后接着会出现时区错误,需要将连接URL加上&serverTimezone=UTC
,亲测成功。
连接数据库:ERROR: The server time zone value ‘�й�’ is unrecognized or represents more than one time zone
提示系统时区出现错误,可以在MySQL中执行命令:
set global time_zone='+8:00'
或者在数据库驱动的url后加上serverTimezone=UTC
参数
写代码的时候要注意,如果该参数是‘?’
后的第一个,即
<property name="jdbcUrl"> jdbc:mysql://localhost:3306/exam?serverTimezone=UTC </property>
是没有问题的,但如果不是第一个,即
<property name="jdbcUrl"> jdbc:mysql://localhost:3306/exam?characterEncoding=utf8&serverTimezone=UTC </property>
这种写法是会报错的,会提示The reference to entity “serverTimezone” must end with the ‘;’ delimiter.
运行后控制台也会出现
对实体“serverTimezone”
的引用必须以‘;’分隔符结尾。
的错误提示。
将代码改为
<property name="jdbcUrl"> jdbc:mysql://localhost:3306/exam?characterEncoding=utf8&serverTimezone=UTC </property>
即可。在xml的配置文件中;
要用 &
代替。
4、启动类Application
启动类要添加
@MapperScan("com.example.mapper")
对应项目中mapper(dao)所对应的包路径,这个注解非常的关键。
需要注意的是如果在启动类不加scanBasePackages,则Spring 容器默认只扫描启动类所在包及其子包中的类并识别为Spring bean。如果需要扫描其他非启动类所在的包及子包的组件,需要手动指定包的路径。
scanBasePackages = {"com.example","com.myproject"}
5、报错java.lang.IllegalArgumentException: No enum constant org.apache.ibatis.type.JdbcType.NUMBE
自动生成执行了两次,使xml文件增加了相同的代码,则报错。
5、修改启动时显示的字母字符
只需要在resources下新建一个banner.txt
文件即可