Spring Boot入门及集成MyBatis开发Web项目

来源:互联网 发布:linux 查看文件内容 编辑:程序博客网 时间:2024/06/05 02:29

1、Maven构建Spring Boot

创建Maven Web工程,引入spring-boot-starter-parent依赖

<code class="hljs xml has-numbering"><span class="hljs-tag"><<span class="hljs-title">project</span> <span class="hljs-attribute">xmlns</span>=<span class="hljs-value">"http://maven.apache.org/POM/4.0.0"</span> <span class="hljs-attribute">xmlns:xsi</span>=<span class="hljs-value">"http://www.w3.org/2001/XMLSchema-instance"</span>    <span class="hljs-attribute">xsi:schemaLocation</span>=<span class="hljs-value">"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"</span>></span>    <span class="hljs-tag"><<span class="hljs-title">modelVersion</span>></span>4.0.0<span class="hljs-tag"></<span class="hljs-title">modelVersion</span>></span>    <span class="hljs-tag"><<span class="hljs-title">groupId</span>></span>xyz.ibenben<span class="hljs-tag"></<span class="hljs-title">groupId</span>></span>    <span class="hljs-tag"><<span class="hljs-title">artifactId</span>></span>zhongdian<span class="hljs-tag"></<span class="hljs-title">artifactId</span>></span>    <span class="hljs-tag"><<span class="hljs-title">packaging</span>></span>war<span class="hljs-tag"></<span class="hljs-title">packaging</span>></span>    <span class="hljs-tag"><<span class="hljs-title">version</span>></span>0.0.1-SNAPSHOT<span class="hljs-tag"></<span class="hljs-title">version</span>></span>    <span class="hljs-tag"><<span class="hljs-title">name</span>></span>zhongdian Maven Webapp<span class="hljs-tag"></<span class="hljs-title">name</span>></span>    <span class="hljs-tag"><<span class="hljs-title">url</span>></span>http://maven.apache.org<span class="hljs-tag"></<span class="hljs-title">url</span>></span>    <span class="hljs-comment"><!-- Inherit defaults from Spring Boot --></span>    <span class="hljs-tag"><<span class="hljs-title">parent</span>></span>        <span class="hljs-tag"><<span class="hljs-title">groupId</span>></span>org.springframework.boot<span class="hljs-tag"></<span class="hljs-title">groupId</span>></span>        <span class="hljs-tag"><<span class="hljs-title">artifactId</span>></span>spring-boot-starter-parent<span class="hljs-tag"></<span class="hljs-title">artifactId</span>></span>        <span class="hljs-tag"><<span class="hljs-title">version</span>></span>1.4.0.BUILD-SNAPSHOT<span class="hljs-tag"></<span class="hljs-title">version</span>></span>    <span class="hljs-tag"></<span class="hljs-title">parent</span>></span>    <span class="hljs-comment"><!-- Add typical dependencies for a web application --></span>    <span class="hljs-tag"><<span class="hljs-title">dependencies</span>></span>        <span class="hljs-tag"><<span class="hljs-title">dependency</span>></span>            <span class="hljs-tag"><<span class="hljs-title">groupId</span>></span>org.springframework.boot<span class="hljs-tag"></<span class="hljs-title">groupId</span>></span>            <span class="hljs-tag"><<span class="hljs-title">artifactId</span>></span>spring-boot-starter-web<span class="hljs-tag"></<span class="hljs-title">artifactId</span>></span>        <span class="hljs-tag"></<span class="hljs-title">dependency</span>></span>    <span class="hljs-tag"></<span class="hljs-title">dependencies</span>></span>    <span class="hljs-comment"><!-- Package as an executable jar --></span>    <span class="hljs-tag"><<span class="hljs-title">build</span>></span>        <span class="hljs-tag"><<span class="hljs-title">plugins</span>></span>            <span class="hljs-tag"><<span class="hljs-title">plugin</span>></span>                <span class="hljs-tag"><<span class="hljs-title">groupId</span>></span>org.springframework.boot<span class="hljs-tag"></<span class="hljs-title">groupId</span>></span>                <span class="hljs-tag"><<span class="hljs-title">artifactId</span>></span>spring-boot-maven-plugin<span class="hljs-tag"></<span class="hljs-title">artifactId</span>></span>            <span class="hljs-tag"></<span class="hljs-title">plugin</span>></span>        <span class="hljs-tag"></<span class="hljs-title">plugins</span>></span>    <span class="hljs-tag"></<span class="hljs-title">build</span>></span>    <span class="hljs-comment"><!-- Add Spring repositories --></span>    <span class="hljs-comment"><!-- (you don't need this if you are using a .RELEASE version) --></span>    <span class="hljs-tag"><<span class="hljs-title">repositories</span>></span>        <span class="hljs-tag"><<span class="hljs-title">repository</span>></span>            <span class="hljs-tag"><<span class="hljs-title">id</span>></span>spring-snapshots<span class="hljs-tag"></<span class="hljs-title">id</span>></span>            <span class="hljs-tag"><<span class="hljs-title">url</span>></span>http://repo.spring.io/snapshot<span class="hljs-tag"></<span class="hljs-title">url</span>></span>            <span class="hljs-tag"><<span class="hljs-title">snapshots</span>></span>                <span class="hljs-tag"><<span class="hljs-title">enabled</span>></span>true<span class="hljs-tag"></<span class="hljs-title">enabled</span>></span>            <span class="hljs-tag"></<span class="hljs-title">snapshots</span>></span>        <span class="hljs-tag"></<span class="hljs-title">repository</span>></span>        <span class="hljs-tag"><<span class="hljs-title">repository</span>></span>            <span class="hljs-tag"><<span class="hljs-title">id</span>></span>spring-milestones<span class="hljs-tag"></<span class="hljs-title">id</span>></span>            <span class="hljs-tag"><<span class="hljs-title">url</span>></span>http://repo.spring.io/milestone<span class="hljs-tag"></<span class="hljs-title">url</span>></span>        <span class="hljs-tag"></<span class="hljs-title">repository</span>></span>    <span class="hljs-tag"></<span class="hljs-title">repositories</span>></span>    <span class="hljs-tag"><<span class="hljs-title">pluginRepositories</span>></span>        <span class="hljs-tag"><<span class="hljs-title">pluginRepository</span>></span>            <span class="hljs-tag"><<span class="hljs-title">id</span>></span>spring-snapshots<span class="hljs-tag"></<span class="hljs-title">id</span>></span>            <span class="hljs-tag"><<span class="hljs-title">url</span>></span>http://repo.spring.io/snapshot<span class="hljs-tag"></<span class="hljs-title">url</span>></span>        <span class="hljs-tag"></<span class="hljs-title">pluginRepository</span>></span>        <span class="hljs-tag"><<span class="hljs-title">pluginRepository</span>></span>            <span class="hljs-tag"><<span class="hljs-title">id</span>></span>spring-milestones<span class="hljs-tag"></<span class="hljs-title">id</span>></span>            <span class="hljs-tag"><<span class="hljs-title">url</span>></span>http://repo.spring.io/milestone<span class="hljs-tag"></<span class="hljs-title">url</span>></span>        <span class="hljs-tag"></<span class="hljs-title">pluginRepository</span>></span>    <span class="hljs-tag"></<span class="hljs-title">pluginRepositories</span>></span><span class="hljs-tag"></<span class="hljs-title">project</span>></span></code>

使用spring-boot-starter-parent来构建Spring Boot项目是一个很好的方法,但很多项目本身就是依赖其它的父模块的,再或者spring-boot-starter-parent默认提供的那么多配置和功能我们用不到。

我们也可以使用其它的依赖方式来引入Spring Boot。

<code class="hljs xml has-numbering"><span class="hljs-tag"><<span class="hljs-title">dependencyManagement</span>></span>     <span class="hljs-tag"><<span class="hljs-title">dependencies</span>></span>        <span class="hljs-tag"><<span class="hljs-title">dependency</span>></span>            <span class="hljs-comment"><!-- Import dependency management from Spring Boot --></span>            <span class="hljs-tag"><<span class="hljs-title">groupId</span>></span>org.springframework.boot<span class="hljs-tag"></<span class="hljs-title">groupId</span>></span>            <span class="hljs-tag"><<span class="hljs-title">artifactId</span>></span>spring-boot-dependencies<span class="hljs-tag"></<span class="hljs-title">artifactId</span>></span>            <span class="hljs-tag"><<span class="hljs-title">version</span>></span>1.4.0.BUILD-SNAPSHOT<span class="hljs-tag"></<span class="hljs-title">version</span>></span>            <span class="hljs-tag"><<span class="hljs-title">type</span>></span>pom<span class="hljs-tag"></<span class="hljs-title">type</span>></span>            <span class="hljs-tag"><<span class="hljs-title">scope</span>></span>import<span class="hljs-tag"></<span class="hljs-title">scope</span>></span>        <span class="hljs-tag"></<span class="hljs-title">dependency</span>></span>    <span class="hljs-tag"></<span class="hljs-title">dependencies</span>></span><span class="hljs-tag"></<span class="hljs-title">dependencyManagement</span>></span></code>

这是Spring官网给的demo配置,有兴趣的可以直接跳过去查看:http://docs.spring.io/spring-boot/docs/1.4.0.RC1/reference/htmlsingle/#getting-started-maven-installation

2、Spring Boot项目的代码结构

Spring Boot项目与一般的Java Web项目的代码结构没有太大的区别或要求,但为了减少配置的数量(无配置),Spring Boot也有一些比较好的建议。

<code class="hljs 1c has-numbering">com +- example     +- myproject         +- Application.java         <span class="hljs-string">|</span>         +- domain         <span class="hljs-string">|   +- Customer.java</span>         <span class="hljs-string">|   +- CustomerRepository.java</span>         <span class="hljs-string">|</span>         +- service         <span class="hljs-string">|   +- CustomerService.java</span>         <span class="hljs-string">|</span>         +- web             +- CustomerController.java</code>

2.1 不要使用默认的包路径

我们交由Spring管理的类,需要放入一个包下。如下图中的DefaultClass.java是不行的。因为Spring Boot对带注解的类进行扫描的时候,这些默认包路径下的类会出问题。

当然,基于代码规范的要求,一般的程序员都不会这样子构建自己的代码,这里说明是为了真的遇到这种情况出问题时,可以快速地解决问题。

这里写图片描述

2.2 Spring Boot应用入口

<code class="hljs avrasm has-numbering">package <span class="hljs-keyword">com</span><span class="hljs-preprocessor">.example</span><span class="hljs-preprocessor">.myproject</span><span class="hljs-comment">;</span>import org<span class="hljs-preprocessor">.springframework</span><span class="hljs-preprocessor">.boot</span><span class="hljs-preprocessor">.SpringApplication</span><span class="hljs-comment">;</span>import org<span class="hljs-preprocessor">.springframework</span><span class="hljs-preprocessor">.boot</span><span class="hljs-preprocessor">.autoconfigure</span><span class="hljs-preprocessor">.EnableAutoConfiguration</span><span class="hljs-comment">;</span>import org<span class="hljs-preprocessor">.springframework</span><span class="hljs-preprocessor">.context</span><span class="hljs-preprocessor">.annotation</span><span class="hljs-preprocessor">.ComponentScan</span><span class="hljs-comment">;</span>import org<span class="hljs-preprocessor">.springframework</span><span class="hljs-preprocessor">.context</span><span class="hljs-preprocessor">.annotation</span><span class="hljs-preprocessor">.Configuration</span><span class="hljs-comment">;</span>@Configuration@EnableAutoConfiguration@ComponentScanpublic class Application {    public static void main(String[] args) {        SpringApplication<span class="hljs-preprocessor">.run</span>(Application<span class="hljs-preprocessor">.class</span>, args)<span class="hljs-comment">;</span>    }}</code>

入口类Application带main方法,我们直接运行main方法就能启动Spring Boot项目了,这样极大程序地方便了我们调试程序和项目。

Application类说明自己是Spring Boot的入口类,那么需要加入@Configuration注解。

@EnableAutoConfiguration习惯放在主方法类Application上,当项目运行时,Spring容器去自动查找带特定注解的类,如:带@Entity、@Service等类。

@ComponentScan如果不带basePackage 属性的话,它会自动扫描以入口类所在的包为父节点下所有子包下的类。这也是Spring Boot会提议我们把Application类放于根包路径下。

如果我们的项目和Spring Boot建议的代码结构一样,Application类放在根包路径下。那么我们可以使用@SpringBootApplication来代替上面三个注解。

<code class="hljs java has-numbering"><span class="hljs-keyword">package</span> com.example.myproject;<span class="hljs-keyword">import</span> org.springframework.boot.SpringApplication;<span class="hljs-keyword">import</span> org.springframework.boot.autoconfigure.SpringBootApplication;<span class="hljs-annotation">@SpringBootApplication</span><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Application</span> {</span>    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span>(String[] args) {        SpringApplication.run(Application.class, args);    }}</code>

3、Spring Boot的Web项目实现

3.1 Application类支持Web应用

<code class="hljs java has-numbering"><span class="hljs-annotation">@SpringBootApplication</span><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Application</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">SpringBootServletInitializer</span> {</span>    <span class="hljs-annotation">@Override</span>    <span class="hljs-keyword">protected</span> SpringApplicationBuilder <span class="hljs-title">configure</span>(SpringApplicationBuilder application) {        <span class="hljs-keyword">return</span> application.sources(Application.class);    }    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span>(String[] args) <span class="hljs-keyword">throws</span> Exception {        SpringApplication.run(Application.class, args);    }}</code>

入口类Application继承SpringBootServletInitializer并重写configure方法。运行主方法后,会将我们的web项目打包成war,并默认启动一个端口为8080的tomcat容器来运行我们的Web项目。

3.2 其它服务器软件支持

如果我们不想使用tomcat,而是其它的服务器软件,如Jetty。你需要移除tomcat的依赖,并加入Jetty的依赖。

<code class="hljs xml has-numbering"><span class="hljs-tag"><<span class="hljs-title">dependency</span>></span>    <span class="hljs-tag"><<span class="hljs-title">groupId</span>></span>org.springframework.boot<span class="hljs-tag"></<span class="hljs-title">groupId</span>></span>    <span class="hljs-tag"><<span class="hljs-title">artifactId</span>></span>spring-boot-starter-web<span class="hljs-tag"></<span class="hljs-title">artifactId</span>></span>    <span class="hljs-tag"><<span class="hljs-title">exclusions</span>></span>        <span class="hljs-tag"><<span class="hljs-title">exclusion</span>></span>            <span class="hljs-tag"><<span class="hljs-title">groupId</span>></span>org.springframework.boot<span class="hljs-tag"></<span class="hljs-title">groupId</span>></span>            <span class="hljs-tag"><<span class="hljs-title">artifactId</span>></span>spring-boot-starter-tomcat<span class="hljs-tag"></<span class="hljs-title">artifactId</span>></span>        <span class="hljs-tag"></<span class="hljs-title">exclusion</span>></span>    <span class="hljs-tag"></<span class="hljs-title">exclusions</span>></span><span class="hljs-tag"></<span class="hljs-title">dependency</span>></span><span class="hljs-tag"><<span class="hljs-title">dependency</span>></span>    <span class="hljs-tag"><<span class="hljs-title">groupId</span>></span>org.springframework.boot<span class="hljs-tag"></<span class="hljs-title">groupId</span>></span>    <span class="hljs-tag"><<span class="hljs-title">artifactId</span>></span>spring-boot-starter-jetty<span class="hljs-tag"></<span class="hljs-title">artifactId</span>></span><span class="hljs-tag"></<span class="hljs-title">dependency</span>></span></code>

3.3 服务器端口更改

增加application.yml配置文件。

这里写图片描述

<code class="hljs vala has-numbering"><span class="hljs-preprocessor"># Server settings  </span>server:      port: <span class="hljs-number">80</span>    address: <span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span></code>

这里需要注意,yml配置文件是的值属性前面必须有一个空格,如果没有空格,Spring的解析器会忽略此配置项。

3.4 Controller

Spring支持Spring MVC的Controler的使用方式。
请参考:http://blog.csdn.net/p_3er/article/category/2868979

Spring Boot应用中@RestController的Controller带有默认基于Jackson2的对象转JSON功能。如:

<code class="hljs java has-numbering"><span class="hljs-annotation">@RestController</span><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyController</span> {</span>    <span class="hljs-annotation">@RequestMapping</span>(<span class="hljs-string">"/thing"</span>)    <span class="hljs-keyword">public</span> MyThing <span class="hljs-title">thing</span>() {            <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> MyThing();    }}</code>

3.5 配置编码及JSP支持

<code class="hljs avrasm has-numbering"><span class="hljs-preprocessor"># SPRING PROFILES  </span><span class="hljs-label">spring:</span>             <span class="hljs-preprocessor"># HTTP ENCODING  </span>    http:          encoding<span class="hljs-preprocessor">.charset</span>: UTF-<span class="hljs-number">8</span>          encoding<span class="hljs-preprocessor">.enable</span>: true          encoding<span class="hljs-preprocessor">.force</span>: true      mvc:        view<span class="hljs-preprocessor">.prefix</span>: /WEB-INF/jsp/        view<span class="hljs-preprocessor">.suffix</span>: <span class="hljs-preprocessor">.jsp</span></code>

加入以上配置后,还需要引入用于编译jsp的jasper包依赖。

<code class="hljs xml has-numbering">        <span class="hljs-tag"><<span class="hljs-title">dependency</span>></span>            <span class="hljs-tag"><<span class="hljs-title">groupId</span>></span>org.apache.tomcat.embed<span class="hljs-tag"></<span class="hljs-title">groupId</span>></span>            <span class="hljs-tag"><<span class="hljs-title">artifactId</span>></span>tomcat-embed-jasper<span class="hljs-tag"></<span class="hljs-title">artifactId</span>></span>            <span class="hljs-tag"><<span class="hljs-title">scope</span>></span>provided<span class="hljs-tag"></<span class="hljs-title">scope</span>></span>        <span class="hljs-tag"></<span class="hljs-title">dependency</span>></span></code>

加入JSP支持配置后,下面a方法和b方法者是跳转到/WEB-INF/jsp/regiester.jsp页面。

<code class="hljs java has-numbering"><span class="hljs-keyword">package</span> xyz.letus.boot.controller;<span class="hljs-keyword">import</span> java.util.Map;<span class="hljs-keyword">import</span> javax.servlet.http.HttpServletRequest;<span class="hljs-keyword">import</span> org.springframework.stereotype.Controller;<span class="hljs-keyword">import</span> org.springframework.web.bind.annotation.RequestMapping;<span class="hljs-keyword">import</span> org.springframework.web.servlet.ModelAndView;<span class="hljs-annotation">@Controller</span><span class="hljs-annotation">@RequestMapping</span>(<span class="hljs-string">"/page"</span>)<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">PageController</span> {</span>    <span class="hljs-annotation">@RequestMapping</span>(<span class="hljs-string">"/a"</span>)    <span class="hljs-keyword">public</span> String <span class="hljs-title">b</span>(Map<String, Object> model){        model.put(<span class="hljs-string">"msg"</span>, <span class="hljs-string">"张三"</span>);             <span class="hljs-keyword">return</span> <span class="hljs-string">"regiester"</span>;    }    <span class="hljs-annotation">@RequestMapping</span>(<span class="hljs-string">"/b"</span>)    <span class="hljs-keyword">public</span> ModelAndView <span class="hljs-title">b</span>(HttpServletRequest request){        ModelAndView view = <span class="hljs-keyword">new</span> ModelAndView();        view.setViewName(<span class="hljs-string">"regiester"</span>);        request.setAttribute(<span class="hljs-string">"msg"</span>, <span class="hljs-string">"Davie"</span>);        <span class="hljs-keyword">return</span> view;    }}</code>

3.6 Spring Boot应用实现热部署

在插件管理中加入springloaded依赖就可以。

<code class="hljs xml has-numbering"> <span class="hljs-comment"><!-- Package as an executable jar --></span>    <span class="hljs-tag"><<span class="hljs-title">build</span>></span>        <span class="hljs-tag"><<span class="hljs-title">plugins</span>></span>            <span class="hljs-tag"><<span class="hljs-title">plugin</span>></span>                <span class="hljs-tag"><<span class="hljs-title">groupId</span>></span>org.springframework.boot<span class="hljs-tag"></<span class="hljs-title">groupId</span>></span>                <span class="hljs-tag"><<span class="hljs-title">artifactId</span>></span>spring-boot-maven-plugin<span class="hljs-tag"></<span class="hljs-title">artifactId</span>></span>                <span class="hljs-tag"><<span class="hljs-title">dependencies</span>></span>                <span class="hljs-comment"><!-- spring热部署--></span>                <span class="hljs-tag"><<span class="hljs-title">dependency</span>></span>                    <span class="hljs-tag"><<span class="hljs-title">groupId</span>></span>org.springframework<span class="hljs-tag"></<span class="hljs-title">groupId</span>></span>                    <span class="hljs-tag"><<span class="hljs-title">artifactId</span>></span>springloaded<span class="hljs-tag"></<span class="hljs-title">artifactId</span>></span>                <span class="hljs-tag"></<span class="hljs-title">dependency</span>></span>            <span class="hljs-tag"></<span class="hljs-title">dependencies</span>></span>            <span class="hljs-tag"></<span class="hljs-title">plugin</span>></span>        <span class="hljs-tag"></<span class="hljs-title">plugins</span>></span>    <span class="hljs-tag"></<span class="hljs-title">build</span>></span></code>

当系统通过 mvn spring-boot:run启动或者 右键application debug 启动java文件时,系统会监视classes文件,当有classes文件被改动时,系统会重新加载类文件,不用重启启动服务。

注:使用application run(非debug模式下),热部署功能会失效。

4、Spring Boot集成MyBatis

4.1 加入基础依赖

MyBatis:

<code class="hljs xml has-numbering"><span class="hljs-comment"><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --></span>        <span class="hljs-tag"><<span class="hljs-title">dependency</span>></span>            <span class="hljs-tag"><<span class="hljs-title">groupId</span>></span>org.mybatis<span class="hljs-tag"></<span class="hljs-title">groupId</span>></span>            <span class="hljs-tag"><<span class="hljs-title">artifactId</span>></span>mybatis<span class="hljs-tag"></<span class="hljs-title">artifactId</span>></span>            <span class="hljs-tag"><<span class="hljs-title">version</span>></span>3.4.0<span class="hljs-tag"></<span class="hljs-title">version</span>></span>        <span class="hljs-tag"></<span class="hljs-title">dependency</span>></span></code>

mybatis-spring-boot-starter:

<code class="hljs xml has-numbering"><span class="hljs-comment"><!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter --></span>        <span class="hljs-tag"><<span class="hljs-title">dependency</span>></span>            <span class="hljs-tag"><<span class="hljs-title">groupId</span>></span>org.mybatis.spring.boot<span class="hljs-tag"></<span class="hljs-title">groupId</span>></span>            <span class="hljs-tag"><<span class="hljs-title">artifactId</span>></span>mybatis-spring-boot-starter<span class="hljs-tag"></<span class="hljs-title">artifactId</span>></span>            <span class="hljs-tag"><<span class="hljs-title">version</span>></span>1.1.1<span class="hljs-tag"></<span class="hljs-title">version</span>></span>        <span class="hljs-tag"></<span class="hljs-title">dependency</span>></span></code>

MySQL:

<code class="hljs xml has-numbering"><span class="hljs-comment"><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --></span>        <span class="hljs-tag"><<span class="hljs-title">dependency</span>></span>            <span class="hljs-tag"><<span class="hljs-title">groupId</span>></span>mysql<span class="hljs-tag"></<span class="hljs-title">groupId</span>></span>            <span class="hljs-tag"><<span class="hljs-title">artifactId</span>></span>mysql-connector-java<span class="hljs-tag"></<span class="hljs-title">artifactId</span>></span>        <span class="hljs-tag"></<span class="hljs-title">dependency</span>></span></code>

4.2 数据库配置

<code class="hljs avrasm has-numbering"><span class="hljs-preprocessor"># SPRING PROFILES  </span><span class="hljs-label">spring:</span>             <span class="hljs-preprocessor"># DATASOURCE  </span>    datasource:          driverClass: <span class="hljs-keyword">com</span><span class="hljs-preprocessor">.mysql</span><span class="hljs-preprocessor">.jdbc</span><span class="hljs-preprocessor">.Driver</span>          url: jdbc:mysql://<span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span>:<span class="hljs-number">3306</span>/hire?useUnicode=true&characterEncoding=utf-<span class="hljs-number">8</span>          username: root          password: test  </code>

4.3 引入通用Mapper

  • 引入依赖
<code class="hljs xml has-numbering">        <span class="hljs-tag"><<span class="hljs-title">dependency</span>></span>            <span class="hljs-tag"><<span class="hljs-title">groupId</span>></span>tk.mybatis<span class="hljs-tag"></<span class="hljs-title">groupId</span>></span>            <span class="hljs-tag"><<span class="hljs-title">artifactId</span>></span>mapper<span class="hljs-tag"></<span class="hljs-title">artifactId</span>></span>            <span class="hljs-tag"><<span class="hljs-title">version</span>></span>3.3.7<span class="hljs-tag"></<span class="hljs-title">version</span>></span>        <span class="hljs-tag"></<span class="hljs-title">dependency</span>></span></code>
  • 配置通用Mapper
<code class="hljs avrasm has-numbering">package xyz<span class="hljs-preprocessor">.ibenben</span><span class="hljs-preprocessor">.zhongdian</span><span class="hljs-preprocessor">.common</span><span class="hljs-preprocessor">.configure</span><span class="hljs-comment">;</span>import org<span class="hljs-preprocessor">.springframework</span><span class="hljs-preprocessor">.boot</span><span class="hljs-preprocessor">.autoconfigure</span><span class="hljs-preprocessor">.AutoConfigureAfter</span><span class="hljs-comment">;</span>import org<span class="hljs-preprocessor">.springframework</span><span class="hljs-preprocessor">.context</span><span class="hljs-preprocessor">.annotation</span><span class="hljs-preprocessor">.Bean</span><span class="hljs-comment">;</span>import org<span class="hljs-preprocessor">.springframework</span><span class="hljs-preprocessor">.context</span><span class="hljs-preprocessor">.annotation</span><span class="hljs-preprocessor">.Configuration</span><span class="hljs-comment">;</span>import tk<span class="hljs-preprocessor">.mybatis</span><span class="hljs-preprocessor">.spring</span><span class="hljs-preprocessor">.mapper</span><span class="hljs-preprocessor">.MapperScannerConfigurer</span><span class="hljs-comment">;</span>import java<span class="hljs-preprocessor">.util</span><span class="hljs-preprocessor">.Properties</span><span class="hljs-comment">;</span>@Configurationpublic class MyBatisMapperScannerConfig {    @Bean    public MapperScannerConfigurer mapperScannerConfigurer() {        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer()<span class="hljs-comment">;</span>        mapperScannerConfigurer<span class="hljs-preprocessor">.setSqlSessionFactoryBeanName</span>(<span class="hljs-string">"sqlSessionFactory"</span>)<span class="hljs-comment">;</span>        mapperScannerConfigurer<span class="hljs-preprocessor">.setBasePackage</span>(<span class="hljs-string">"xyz.ibenben.zhongdian.*.dao"</span>)<span class="hljs-comment">;</span>        Properties properties = new Properties()<span class="hljs-comment">;</span>        properties<span class="hljs-preprocessor">.setProperty</span>(<span class="hljs-string">"mappers"</span>, <span class="hljs-string">"xyz.ibenben.zhongdian.common.BaseDao"</span>)<span class="hljs-comment">;</span>        properties<span class="hljs-preprocessor">.setProperty</span>(<span class="hljs-string">"notEmpty"</span>, <span class="hljs-string">"false"</span>)<span class="hljs-comment">;</span>        properties<span class="hljs-preprocessor">.setProperty</span>(<span class="hljs-string">"IDENTITY"</span>, <span class="hljs-string">"MYSQL"</span>)<span class="hljs-comment">;</span>        mapperScannerConfigurer<span class="hljs-preprocessor">.setProperties</span>(properties)<span class="hljs-comment">;</span>        return mapperScannerConfigurer<span class="hljs-comment">;</span>    }}</code>

其实MyBatisMapperScannerConfig 是一个MyBatis扫描Mapper接口扫描。

MapperScannerConfigurer根据指定的创建接口或注解创建映射器。我们这里映射了xyz.ibenben.zhongdian.*.dao包下的接口。

使用MapperScannerConfigurer,没有必要去指定SqlSessionFactory或SqlSessionTemplate,因为MapperScannerConfigurer将会创建MapperFactoryBean,之后自动装配。但是,如果你使用了一个以上的DataSource(因此,也是多个的SqlSessionFactory),那么自动装配可能会失效。这种情况下,你可以使用sqlSessionFactory或sqlSessionTemplate属性来设置正确的工厂/模板。

注意的是网络上有些文章中在MapperScannerConfigurer之前还配置了 MyBatisConfig,因为MapperScannerConfigurer会创建MapperFactoryBean,所以我的项目中没有再配置MyBatisConfig。经使用没有出现任何问题。

4.4 通用Mapper的使用(Dao层)

BaseDao:

<code class="hljs axapta has-numbering">package xyz.ibenben.zhongdian.<span class="hljs-keyword">common</span>;import tk.mybatis.mapper.<span class="hljs-keyword">common</span>.Mapper;import tk.mybatis.mapper.<span class="hljs-keyword">common</span>.MySqlMapper;<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">BaseDao</span><<span class="hljs-title">T</span>> <span class="hljs-inheritance"><span class="hljs-keyword">extends</span></span> <span class="hljs-title">Mapper</span><<span class="hljs-title">T</span>>,<span class="hljs-title">MySqlMapper</span><<span class="hljs-title">T</span>>{</span>}</code>

*Dao:

<code class="hljs avrasm has-numbering">package xyz<span class="hljs-preprocessor">.ibenben</span><span class="hljs-preprocessor">.zhongdian</span><span class="hljs-preprocessor">.system</span><span class="hljs-preprocessor">.dao</span><span class="hljs-comment">;</span>import java<span class="hljs-preprocessor">.util</span><span class="hljs-preprocessor">.List</span><span class="hljs-comment">;</span>import org<span class="hljs-preprocessor">.apache</span><span class="hljs-preprocessor">.ibatis</span><span class="hljs-preprocessor">.annotations</span><span class="hljs-preprocessor">.Select</span><span class="hljs-comment">;</span>import xyz<span class="hljs-preprocessor">.ibenben</span><span class="hljs-preprocessor">.zhongdian</span><span class="hljs-preprocessor">.common</span><span class="hljs-preprocessor">.BaseDao</span><span class="hljs-comment">;</span>import xyz<span class="hljs-preprocessor">.ibenben</span><span class="hljs-preprocessor">.zhongdian</span><span class="hljs-preprocessor">.system</span><span class="hljs-preprocessor">.entity</span><span class="hljs-preprocessor">.User</span><span class="hljs-comment">;</span>public interface UserDao extends BaseDao<User>{    @Select(<span class="hljs-string">"select * from user where state = #{state}"</span>)    public List<User> selectByState(Integer state)<span class="hljs-comment">;</span>}</code>

MyBatis的Dao与其它的ORM框架不一样的是,MyBatis的Dao其实就是Mapper,是一个接口,是通过MapperScannerConfigurer扫描后生成实现的,我们不需要再写Dao接口的实现。

4.5 业务处理及事务(Service层)

<code class="hljs java has-numbering"><span class="hljs-keyword">package</span> xyz.ibenben.zhongdian.system.service;<span class="hljs-keyword">import</span> xyz.ibenben.zhongdian.system.entity.User;<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">UserService</span> {</span>    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">saveUser</span>(User user);}</code>
<code class="hljs avrasm has-numbering">package xyz<span class="hljs-preprocessor">.ibenben</span><span class="hljs-preprocessor">.zhongdian</span><span class="hljs-preprocessor">.system</span><span class="hljs-preprocessor">.service</span><span class="hljs-preprocessor">.impl</span><span class="hljs-comment">;</span>import java<span class="hljs-preprocessor">.util</span><span class="hljs-preprocessor">.List</span><span class="hljs-comment">;</span>import org<span class="hljs-preprocessor">.apache</span><span class="hljs-preprocessor">.ibatis</span><span class="hljs-preprocessor">.session</span><span class="hljs-preprocessor">.RowBounds</span><span class="hljs-comment">;</span>import org<span class="hljs-preprocessor">.springframework</span><span class="hljs-preprocessor">.beans</span><span class="hljs-preprocessor">.factory</span><span class="hljs-preprocessor">.annotation</span><span class="hljs-preprocessor">.Autowired</span><span class="hljs-comment">;</span>import org<span class="hljs-preprocessor">.springframework</span><span class="hljs-preprocessor">.stereotype</span><span class="hljs-preprocessor">.Service</span><span class="hljs-comment">;</span>import org<span class="hljs-preprocessor">.springframework</span><span class="hljs-preprocessor">.transaction</span><span class="hljs-preprocessor">.annotation</span><span class="hljs-preprocessor">.Transactional</span><span class="hljs-comment">;</span>import xyz<span class="hljs-preprocessor">.ibenben</span><span class="hljs-preprocessor">.zhongdian</span><span class="hljs-preprocessor">.system</span><span class="hljs-preprocessor">.dao</span><span class="hljs-preprocessor">.TaskDao</span><span class="hljs-comment">;</span>import xyz<span class="hljs-preprocessor">.ibenben</span><span class="hljs-preprocessor">.zhongdian</span><span class="hljs-preprocessor">.system</span><span class="hljs-preprocessor">.dao</span><span class="hljs-preprocessor">.UserDao</span><span class="hljs-comment">;</span>import xyz<span class="hljs-preprocessor">.ibenben</span><span class="hljs-preprocessor">.zhongdian</span><span class="hljs-preprocessor">.system</span><span class="hljs-preprocessor">.entity</span><span class="hljs-preprocessor">.Task</span><span class="hljs-comment">;</span>import xyz<span class="hljs-preprocessor">.ibenben</span><span class="hljs-preprocessor">.zhongdian</span><span class="hljs-preprocessor">.system</span><span class="hljs-preprocessor">.entity</span><span class="hljs-preprocessor">.User</span><span class="hljs-comment">;</span>import xyz<span class="hljs-preprocessor">.ibenben</span><span class="hljs-preprocessor">.zhongdian</span><span class="hljs-preprocessor">.system</span><span class="hljs-preprocessor">.service</span><span class="hljs-preprocessor">.UserService</span><span class="hljs-comment">;</span>@Servicepublic class UserServiceImpl implements UserService{    @Autowired    private UserDao userDao<span class="hljs-comment">;</span>    @Autowired    private TaskDao taskDao<span class="hljs-comment">;</span>    @Transactional    public void saveUser(User user){        user = userDao<span class="hljs-preprocessor">.selectByPrimaryKey</span>(<span class="hljs-number">1</span>)<span class="hljs-comment">;</span>        user<span class="hljs-preprocessor">.setUsername</span>(<span class="hljs-string">"5566"</span>)<span class="hljs-comment">;</span>        userDao<span class="hljs-preprocessor">.updateByPrimaryKey</span>(user)<span class="hljs-comment">;</span>//      int i = <span class="hljs-number">10</span>/<span class="hljs-number">0</span><span class="hljs-comment">;</span>        Task task = new Task()<span class="hljs-comment">;</span>        task<span class="hljs-preprocessor">.setName</span>(<span class="hljs-string">"task 100"</span>)<span class="hljs-comment">;</span>        task<span class="hljs-preprocessor">.setDescript</span>(<span class="hljs-string">"task100 descriot"</span>)<span class="hljs-comment">;</span>        task<span class="hljs-preprocessor">.setState</span>(<span class="hljs-number">1</span>)<span class="hljs-comment">;</span>        taskDao<span class="hljs-preprocessor">.insert</span>(task)<span class="hljs-comment">;</span>        Task temp = new Task()<span class="hljs-comment">;</span>        task<span class="hljs-preprocessor">.setState</span>(<span class="hljs-number">1</span>)<span class="hljs-comment">;</span>        List<Task> list = taskDao<span class="hljs-preprocessor">.selectByRowBounds</span>(temp, new RowBounds(<span class="hljs-number">2</span>, <span class="hljs-number">12</span>))<span class="hljs-comment">;</span>        System<span class="hljs-preprocessor">.out</span><span class="hljs-preprocessor">.println</span>(list<span class="hljs-preprocessor">.size</span>())<span class="hljs-comment">;</span>        for(Task t : list){            System<span class="hljs-preprocessor">.out</span><span class="hljs-preprocessor">.println</span>(t<span class="hljs-preprocessor">.getName</span>())<span class="hljs-comment">;</span>        }        List<User> users = userDao<span class="hljs-preprocessor">.selectByState</span>(<span class="hljs-number">1</span>)<span class="hljs-comment">;</span>        for(User u : users){            System<span class="hljs-preprocessor">.out</span><span class="hljs-preprocessor">.println</span>(u<span class="hljs-preprocessor">.getUsername</span>())<span class="hljs-comment">;</span>        }    }}</code>

Spring Boot集成MyBatis后,实现事物管理的方法很简单,只需要在业务方法前面加上@Transactional注解就可以了。

上面方法中用了一个被除数为0的表达式来进行测试事务。

5、完整源码下载

https://github.com/ibenben/spring-boot-mybatis-demo

0 0
原创粉丝点击