Spring Boot整合MyBatis及generater自动生成DAO并实现RESTful API
1.在项目的POM.XML文件的build标签中,增加如下内容:
<plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.4.0</version> <dependencies> <dependency> <groupId> mysql</groupId> <artifactId> mysql-connector-java</artifactId> <version> 8.0.27</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.4.0</version> </dependency> </dependencies> <executions> <execution> <id>Generate MyBatis Artifacts</id> <phase>package</phase> <goals> <goal>generate</goal> </goals> </execution> </executions> <configuration> <!--允许移动生成的文件 --> <verbose>true</verbose> <!-- 是否覆盖 --> <overwrite>true</overwrite> <!-- 自动生成的配置 --> <configurationFile> src/main/resources/mybatis-generator.xml</configurationFile> </configuration> </plugin>
2.将application.properties 改为application.yml
server: port: 8080 servlet: context-path: / spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/mytest?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC username: root password: root mybatis: mapper-locations: classpath:mapping/*.xml type-aliases-package: cn.felixfang.flog.entity
3.从以上文件我们可以看到,对应的configurationFile的位置,所以接下来,我们将在resources中建立mybatis-generator.xml
mybatis-generator.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> <context id="DB2Tables" targetRuntime="MyBatis3"> <commentGenerator> <property name="suppressDate" value="true"/> <property name="suppressAllComments" value="true"/> </commentGenerator> <!--数据库链接地址账号密码--> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/mytest?nullCatalogMeansCurrent=true" userId="root" password="root888"> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!--生成Model类存放位置--> <javaModelGenerator targetPackage="cn.na.demo.model" targetProject="src/main/java"> <property name="enableSubPackages" value="false"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!--生成映射文件存放位置xml--> <!-- 生成SQL map的XML文件生成器, 注意,在Mybatis3之后,我们可以使用mapper.xml文件+Mapper接口(或者不用mapper接口), 或者只使用Mapper接口+Annotation,所以,如果 javaClientGenerator配置中配置了需要生成XML的话,这个元素就必须配置 targetPackage/targetProject:同javaModelGenerator --> <sqlMapGenerator targetPackage="cn.na.demo.mapper" targetProject="src/main/java"> <property name="enableSubPackages" value="false"/> </sqlMapGenerator> <!--生成Dao类存放位置--> <!-- 对于mybatis来说,即生成Mapper接口,注意,如果没有配置该元素,那么默认不会生成Mapper接口 targetPackage/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 type="ANNOTATEDMAPPER" targetPackage="cn.na.demo.dao" targetProject="src/main/java"> <property name="enableSubPackages" value="false"/> </javaClientGenerator> <!--生成对应表及类名--> <table tableName="book" domainObjectName="book" schema= "mytest" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table> </context> </generatorConfiguration>
然后使用命令:mvn mybatis-generator:generate,即可以生成相应的文件。
4.修改Mapper
在bookMapper.java中,增加以下内容:
@Select({ "select", "bookid, bookname, sl, price", "from book" }) @Results({ @Result(column="bookid", property="bookid", jdbcType=JdbcType.INTEGER, id=true), @Result(column="bookname", property="bookname", jdbcType=JdbcType.VARCHAR), @Result(column="sl", property="sl", jdbcType=JdbcType.INTEGER), @Result(column="price", property="price", jdbcType=JdbcType.DECIMAL) }) List<book> selectAll();
5.添加Service
然后我们在service文件夹中,添加一个bookservice.java接口,同时再添加一个impl文件夹,表示它的实现,在impl文件夹中增加bookserviceimpl.java类,实现bookservice接口。
bookservice.java
package cn.fh.backapi.service; import java.util.List; import cn.fh.demo.model.book; public interface bookservice { public void insert(book book); public book selectByPrimaryKey(Integer id); public List<book> selectAll(); }
bookserviceimpl.java
package cn.fh.backapi.service.impl; import java.util.List; import javax.annotation.Resource; import org.springframework.context.annotation.ComponentScan; import org.springframework.stereotype.Service; import cn.fh.backapi.service.bookservice; import cn.fh.demo.dao.bookMapper; import cn.fh.demo.model.book; @ComponentScan({"cn.fh.demo.dao"}) @Service("bookservice") public class bookserviceimpl implements bookservice { @Resource private bookMapper bookMapper; @Override public void insert(book book) { bookMapper.insert(book); } public book selectByPrimaryKey(Integer id) { return bookMapper.selectByPrimaryKey(id); } public List<book> selectAll() { return bookMapper.selectAll(); } }
6. 添加controller
接下来,我们添加controller文件夹,并实现bookcontroller.java控制器。
bookcontroller.java
import java.util.List; import javax.annotation.Resource; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.ComponentScan; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import cn.na.cwbb.model.book; import cn.na.cwbb.service.bookservice; @RestController @ComponentScan({ "cn.na.cwbb.service" }) @MapperScan("cn.na.cwbb.dao") public class bookcontroller { @Resource private bookservice booksService; @RequestMapping(value = "/books", method = RequestMethod.GET) public List<book> getAllBooks() { List<book> bookList = booksService.selectAll(); return bookList; } @RequestMapping(value = "/{id}", method = RequestMethod.GET) public book getbook(@PathVariable("id") Integer id) { book book = booksService.selectByPrimaryKey(id); return book; } }
其中 @PathVariable是spring3.0的一个新功能:接收请求路径中占位符的值

7. 含参数访问
给个简单的实例:
@CrossOrigin @RequestMapping(value="/getBookById", method = RequestMethod.POST) @ResponseBody public String getBookById(@RequestBody String id){ Books books = booksService.selectByPrimaryKey(Integer.parseInt(id)); return "HelloWord"+"fasdf--"+books.getName()+"--"+books.getAuthor(); }
登录usermapper多参数查询
@Select({ "select", "username, password", "from user", "where username = #{username,jdbcType=VARCHAR} and password = #{password,jdbcType=VARCHAR}" }) @Results({ @Result(column = "username", property = "username", jdbcType = JdbcType.VARCHAR), @Result(column = "password", property = "password", jdbcType = JdbcType.VARCHAR) }) user getuser(String username,String password);
浙公网安备 33010602011771号