- 利用maven构建基础工程
- 配置pom.xml
- 配置generator反向工程生成实体类
- 按照J2EE的开发方式 创建dao层 , service层 ,control层
一、利用maven构建基础工程
首先new 一个新的project,选择Spring Initializr,我用的是java1.8的版本,这里特别留意版本,后面有说遇到的坑
这里选择依赖包,web,JPA,MySQL,MyBatis,然后pom.xml就会自动帮你加入
最后一直next,finish就生成一个基础的项目了。(通常情况下,右下角有提示你是否下载maven依赖包,如果没有提示,可以选上面栏目的build下的build project )
二.配置pom.xml
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.wtg</groupId>
<artifactId>newframework</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>newframework</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<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>1.3.2</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>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<configurationFile>src\main\resources\generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
</dependencies>
</plugin>
<!--因为上面选了java8,这里就不需要加这个依赖-->
<!--<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<verbose /><!– 这个选项用来传递编译器自身不包含但是却支持的参数选项 –>
<!– <bootclasspath>${java.home}/lib/rt.jar:${java.home}/jre/lib/jce.jar</bootclasspath> –>
</compilerArguments>
</configuration>
</plugin>-->
</plugins>
</build>
</project>
三、配置generator反向工程生成实体类
备注:上面的步骤完成之后,如果直接运行的话,会报错:Failed to determine a suitable driver class…(因为我们pom.xml里面集成了mybatis,但是却没有数据库的配置),如果是想写一个Hello World的入门的话,在添加依赖包的时候,只添加一个web就行了
反向工程配置文件:
1.generator.properties
#dao类和实体类的位置
project=src/main/java
#mapper文件的位置
resources=src/main/resources
#配置数据库的驱动名称,链接地址,用户名,密码
#com.mysql.cj.jdbc.Driver这个是最新的jdbc.driver(jdbc驱动名称)、
#我用的mysql-connector-java-5.1.6.jar,下面配置有说,注意点①
#低版本用的是com.mysql.jdbc.Driver,具体名称要根据版本来决定
#下载地址:https://download.csdn.net/download/a3311743/10920580
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/frame_test
jdbc.user=root
jdbc.password=88888
2.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>
<!-- 引入配置文件,这里就是上面的generator.properties,里面声明了反向工程的配置 -->
<properties resource="generator.properties"/>
<!--classPathEntry:数据库的JDBC驱动,换成你自己的驱动位置,和上面的注意点①对应 -->
<classPathEntry location="E:\Development-Software\mysql-connector-java-5.1.6.jar" />
<!--一个数据库一个context -->
<!--defaultModelType:用于设置产生的模型类型
defaultModelType=flat——每一张表只生成一个实体类;
还有conditional,hierarchical类型,常用的就flat,
targetRuntime:1,MyBatis3:默认的值,生成基于MyBatis3.x以上版本的内容,包括XXXBySample;
2,MyBatis3Simple:类似MyBatis3,只是不生成XXXBySample;注意点②
这里用的MyBatis3,因为MyBatis3Simple只生成了insert的方法,具体原因未明,有知道可以留言探讨-->
<context id="MysqlTables" targetRuntime="MyBatis3" defaultModelType="flat">
<!-- autoDelimitKeywords:自动识别数据库关键字,默认false,如果设置为true,
根据SqlReservedWords中定 义的关键字列表;一般保留默认值,
遇到数据库关键字(Java关键字),使用columnOverride覆盖 -->
<property name="autoDelimitKeywords" value="true" />
<!-- javaFileEncoding:生成的Java文件的编码 -->
<property name="javaFileEncoding" value="utf-8" />
<!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
<property name="beginningDelimiter" value="`" />
<property name="endingDelimiter" value="`" />
<!-- 格式化java代码 -->
<property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
<!-- 格式化XML代码 -->
<property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
<!--实现了Serializable接口,实体类中的private static final long serialVersionUID = 1L;-->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
<!--实体类生成tostring方法-->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
<!-- 数据库的注释是否需要映射 -->
<commentGenerator >
<property name="suppressAllComments" value="true"/><!-- 是否取消注释 ,true—取消,false—映射-->
<property name="suppressDate" value="true" /> <!-- 是否生成注释代时间戳,true—取消,false—生成-->
</commentGenerator>
<!-- jdbc连接,通过${}可读取generator.properties的配置信息 -->
<jdbcConnection driverClass="${jdbc.driver}" connectionURL="${jdbc.url}" userId="${jdbc.user}" password="${jdbc.password}" />
<!-- 类型转换 -->
<javaTypeResolver>
<!--
forceBigDecimals: true: 使用BigDecimal对应DECIMAL和 NUMERIC数据类型
forceBigDecimals: false:默认, scale>0;length>18:使用BigDecimal;
scale=0;length[10,18]:使用Long;
scale=0;length[5,9]:使用Integer;
scale=0;length<5:使用Short;
-->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- javaModelGenerator :java模型创建器
targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录
targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制;
enableSubPackages:默认为false,为true时,在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下
trimStrings:true时,设置是否在getter方法中,对String类型字段调用trim()方法
-->
<javaModelGenerator targetProject="${project}" targetPackage="com.demo.entity" >
<property name="enableSubPackages" value="false"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成mapxml文件 -->
<sqlMapGenerator targetPackage="mapper" targetProject="${resources}" >
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- 对于mybatis来说,即生成Mapper接口(dao层),注意,如果没有配置该元素,那么默认不会生成Mapper接口
targetPackage:同javaModelGenerator
targetProject:同javaModelGenerator
type:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下):
1,ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML;
2,MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中;
3,XMLMAPPER:会生成Mapper接口,接口完全依赖XML;
注意点②,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER
-->
<javaClientGenerator targetPackage="com.demo.dao" targetProject="${project}" type="XMLMAPPER" >
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- table可以有多个,每个数据库中的表都可以写一个table,tableName表示要匹配的数据库表,也可以在tableName属性中通过使用%通配符来匹配所有数据库表,只有匹配的表才会自动生成文件 -->
<!--tableName:表名,注意大小写敏感问题
enableInsert(默认true):指定是否生成insert语句;
enableSelectByPrimaryKey:默认true,指定是否生成按照主键查询对象的语句(就是getById或get);
enableSelectByExample:默认true,MyBatis3Simple为false,指定是否生成动态查询语句;
enableUpdateByPrimaryKey:默认true,指定是否生成按照主键修改对象的语句(即update);
enableDeleteByPrimaryKey:默认true,指定是否生成按照主键删除对象的语句(即delete);
enableDeleteByExample:默认true,MyBatis3Simple为false,指定是否生成动态删除语句;
enableCountByExample:默认true,MyBatis3Simple为false,指定是否生成动态查询总条数语句(用于分页的总条数查询);
12,enableUpdateByExample:默认true,MyBatis3Simple为false,指定是否生成动态修改语句(只修改对象中不为空的属性); -->
<table tableName="userinfo"
enableCountByExample="true"
enableUpdateByExample="true"
enableDeleteByExample="true"
enableSelectByExample="true"
selectByExampleQueryId="true">
<property name="useActualColumnNames" value="false" />
</table>
</context>
</generatorConfiguration>
找到View—Tool Windows—Maven Project—Plugins—mybatis-generator,右键Run Maven Build
就能生成
四. 按照J2EE的开发方式 创建dao层 , service层 ,control层
方法一
运用UserMapper.xml来增删改查,这方法后面再补充
方法二
**原理:**入口在UserControl,然后UserControl中调用UserService接口方法,UserServiceImpl中继承UserService接口,重写方法(方法中调用UserinfoMapper的操作)
访问顺序:UserControl——UserService——UserServiceImpl——UserinfoMapper
创建顺序:UserService——UserServiceImpl——UserinfoMapper——UserControl、
UserService.java
package com.demo.service;
import com.demo.entity.Userinfo;
public interface UserService {
public void insert(Userinfo user);
public void insertSelective(Userinfo user);
public void delete(String id);
public void update(Userinfo user);
public Userinfo select(String id);
}
UserServiceImpl.java
package com.demo.service.imp;
import com.demo.dao.UserinfoMapper;
import com.demo.entity.Userinfo;
import com.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserinfoMapper userinfoMapper;
@Override
public void insert(Userinfo user) {
userinfoMapper.insert(user);
}
@Override
public void insertSelective(Userinfo user) {
userinfoMapper.insertSelective(user);
}
@Override
public void delete(String id) {
}
@Override
public void update(Userinfo user) {
}
@Override
public Userinfo select(String id) {
return null;
}
}
UserMapper.java
package com.demo.dao;
import com.demo.entity.Userinfo;
import com.demo.entity.UserinfoExample;
import java.util.List;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@Mapper
public interface UserinfoMapper {
int countByExample(UserinfoExample example);
int deleteByExample(UserinfoExample example);
// @Insert("INSERT INTO userinfo (user_id,user_name,user_age) values ( #{userId},#{userName},#{userAge})")
int insert(Userinfo record);
@Insert("这里是sql")
int insertSelective(Userinfo record);
@Insert("这里是sql")
List<Userinfo> selectByExample(UserinfoExample example);
@update("这里是sql")
int updateByExampleSelective(@Param("record") Userinfo record, @Param("example") UserinfoExample example);
@update("这里是sql")
int updateByExample(@Param("record") Userinfo record, @Param("example") UserinfoExample example);
}
UserControl.java
package com.demo.control;
import com.demo.entity.Userinfo;
import com.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class UserControl {
@Autowired
private UserService userService;
@RequestMapping("/hello")
public String hello(){
return "hello";
}
@RequestMapping("/insert")
public String insert(Userinfo user){
userService.insert(user);
return user.getUserName();
}
}
五、运行
上面的文件建好之后,再在NewframeworkApplication.java(启动类)中添加
@SpringBootApplication
@MapperScan(“com.demo.dao”)
再运行这个方法(图中红框)
在地址栏上输入链接:http://localhost:8080/insert?userId=4&userName=22&userAge=33
数据就插入到数据库了
附录:
文件结构图
数据库字段:、