初学者mysql+mybatis-springboot的demo

来源:互联网 发布:开淘宝规则 编辑:程序博客网 时间:2024/06/06 10:55

springboot是一个新的框架,我因为工作的需要也学习了这个框架,他少了很多配置的文件,
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
下面是我简单的写了一个demo,越努力的人越幸运 共勉,

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>    <groupId>com.example</groupId>    <artifactId>mysql-mybatis-springboot</artifactId>    <version>0.0.1-SNAPSHOT</version>    <packaging>jar</packaging>    <name>mysql-mybatis-springboot</name>    <description>Demo project for Spring Boot</description>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.5.6.RELEASE</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <properties>        <!-- 依赖版本 -->        <mybatis.version>3.3.1</mybatis.version>        <mybatis.spring.version>1.2.4</mybatis.spring.version>        <mapper.version>3.3.9</mapper.version>        <pagehelper.version>4.1.6</pagehelper.version>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>        <java.version>1.8</java.version>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-actuator</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-security</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-thymeleaf</artifactId>        </dependency>        <dependency>            <groupId>org.apache.httpcomponents</groupId>            <artifactId>httpclient</artifactId>            <scope>test</scope>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>        <!--mysql-->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>5.1.21</version>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-jdbc</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>        </dependency>        <dependency>            <groupId>com.fasterxml.jackson.core</groupId>            <artifactId>jackson-core</artifactId>        </dependency>        <dependency>            <groupId>com.fasterxml.jackson.core</groupId>            <artifactId>jackson-databind</artifactId>        </dependency>        <dependency>            <groupId>com.fasterxml.jackson.datatype</groupId>            <artifactId>jackson-datatype-joda</artifactId>        </dependency>        <dependency>            <groupId>com.fasterxml.jackson.module</groupId>            <artifactId>jackson-module-parameter-names</artifactId>        </dependency>        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>        </dependency>        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid</artifactId>            <version>0.2.15</version>        </dependency>        <!--Mybatis -->        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis</artifactId>            <version>${mybatis.version}</version>        </dependency>        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis-spring</artifactId>            <version>${mybatis.spring.version}</version>        </dependency>        <!--通用Mapper -->        <dependency>            <groupId>tk.mybatis</groupId>            <artifactId>mapper</artifactId>            <version>${mapper.version}</version>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-security</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-security</artifactId>        </dependency>        <!--分页插件 -->        <dependency>            <groupId>com.github.pagehelper</groupId>            <artifactId>pagehelper</artifactId>            <version>${pagehelper.version}</version>        </dependency>        <dependency>            <groupId>org.jsoup</groupId>            <artifactId>jsoup</artifactId>            <version>1.10.1</version>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-jdbc</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>        </dependency>        <dependency>            <groupId>com.fasterxml.jackson.core</groupId>            <artifactId>jackson-core</artifactId>        </dependency>        <dependency>            <groupId>com.fasterxml.jackson.core</groupId>            <artifactId>jackson-databind</artifactId>        </dependency>        <dependency>            <groupId>com.fasterxml.jackson.datatype</groupId>            <artifactId>jackson-datatype-joda</artifactId>        </dependency>        <dependency>            <groupId>com.fasterxml.jackson.module</groupId>            <artifactId>jackson-module-parameter-names</artifactId>        </dependency>        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>        </dependency>        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid</artifactId>            <version>0.2.15</version>        </dependency>        <!--Mybatis -->        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis</artifactId>            <version>${mybatis.version}</version>        </dependency>        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis-spring</artifactId>            <version>${mybatis.spring.version}</version>        </dependency>        <!--分页插件 -->        <dependency>            <groupId>com.github.pagehelper</groupId>            <artifactId>pagehelper</artifactId>            <version>${pagehelper.version}</version>        </dependency>        <!--通用Mapper -->        <dependency>            <groupId>tk.mybatis</groupId>            <artifactId>mapper</artifactId>            <version>${mapper.version}</version>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>

然后就是配置文件
application.yml

server:  port: 8080spring.thymeleaf.cache: falsesecurity.basic.enabled: falsespring.datasource:  name: dev  url: jdbc:mysql://127.0.0.1:3306/h5?useUnicode=true&characterEncoding=utf8&useSSL=false  username: root  password: admin  # 使用druid数据源  filters: stat  maxActive: 20  initialSize: 1  maxWait: 60000  minIdle: 1  timeBetweenEvictionRunsMillis: 60000  minEvictableIdleTimeMillis: 300000  validationQuery: select 'x'  testWhileIdle: true  testOnBorrow: false  testOnReturn: false  poolPreparedStatements: true  maxOpenPreparedStatements: 20logging:  level: info

配完这些之后就是代码的实现了
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.sara.mapper.UserMapper" >  <resultMap id="BaseResultMap" type="com.sara.entity.User" >    <!--      WARNING - @mbg.generated    -->    <id column="id" property="id" jdbcType="BIGINT" />    <result column="username" property="username" jdbcType="VARCHAR" />    <result column="psw" property="psw" jdbcType="VARCHAR" />    <result column="phone" property="phone" jdbcType="VARCHAR" />    <result column="alipay" property="alipay" jdbcType="VARCHAR" />    <result column="type" property="type" jdbcType="VARCHAR" />    <result column="create_date" property="createDate" jdbcType="TIMESTAMP" />    <result column="grade" property="grade" jdbcType="VARCHAR" />    <result column="close" property="close" jdbcType="TINYINT" />  </resultMap></mapper>

Mybatis里面的一些基本配置
MyBatisConfig

/* * The MIT License (MIT) * * Copyright (c) 2014-2016 abel533@gmail.com * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */package com.sara.config;import org.apache.ibatis.plugin.Interceptor;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.SqlSessionTemplate;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.core.io.support.ResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import org.springframework.transaction.PlatformTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;import org.springframework.transaction.annotation.TransactionManagementConfigurer;import javax.sql.DataSource;import java.util.Properties;/** * MyBatis基础配置 * @author xj.z * @version 1.0 */@Configuration@EnableTransactionManagementpublic class MyBatisConfig implements TransactionManagementConfigurer {    @Autowired    DataSource dataSource;    @Bean(name = "sqlSessionFactory")    public SqlSessionFactory sqlSessionFactoryBean() {        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();        bean.setDataSource(dataSource);        bean.setTypeAliasesPackage("com.sara.entity");        //添加XML目录        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();        try {            bean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));            return bean.getObject();        } catch (Exception e) {            e.printStackTrace();            throw new RuntimeException(e);        }    }    @Bean    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {        return new SqlSessionTemplate(sqlSessionFactory);    }    @Bean    @Override    public PlatformTransactionManager annotationDrivenTransactionManager() {        return new DataSourceTransactionManager(dataSource);    }}

MyBatisMapperScannerConfig

/* * The MIT License (MIT) * * Copyright (c) 2014-2016 abel533@gmail.com * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */package com.sara.config;import org.springframework.boot.autoconfigure.AutoConfigureAfter;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import tk.mybatis.spring.mapper.MapperScannerConfigurer;import java.util.Properties;/** * MyBatis扫描接口,使用的tk.mybatis.spring.mapper.MapperScannerConfigurer,如果你不使用通用Mapper,可以改为org.xxx... * * @author mijun * */@Configuration// 注意,由于MapperScannerConfigurer执行的比较早,所以必须有下面的注解@AutoConfigureAfter(MyBatisConfig.class)public class MyBatisMapperScannerConfig {    @Bean    public MapperScannerConfigurer mapperScannerConfigurer() {        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();        mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");        mapperScannerConfigurer.setBasePackage("com.sara.mapper");        Properties properties = new Properties();        properties.setProperty("mappers", "tk.mybatis.mapper.common.Mapper");        properties.setProperty("notEmpty", "false");        properties.setProperty("IDENTITY", "MYSQL");        mapperScannerConfigurer.setProperties(properties);        return mapperScannerConfigurer;    }}

WebMvcConfig

package com.sara.config;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;@Configurationpublic class WebMvcConfig extends WebMvcConfigurerAdapter {    /**      * 配置拦截器      * @author lance      * @param registry      */  }

WebSecurityConfig

package com.sara.config;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.autoconfigure.security.SecurityProperties;import org.springframework.context.annotation.Configuration;import org.springframework.core.annotation.Order;import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.builders.WebSecurity;import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;import org.springframework.security.core.userdetails.UserDetailsService;import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;import org.springframework.security.web.util.matcher.AntPathRequestMatcher;public class WebSecurityConfig extends WebSecurityConfigurerAdapter {    @Autowired    private UserDetailsService userDetailsService;    private String[] pathPatterns = {"/login/*","/register/*","/rest/*"};    private String[] csrfPatterns = {"/rest/*"};    @Override    protected void configure(HttpSecurity http) throws Exception {        http.authorizeRequests().antMatchers(pathPatterns).permitAll().anyRequest().fullyAuthenticated()        .and().formLogin().loginPage("/login").failureUrl("/login?error").permitAll()        .and().logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).permitAll()        .and().csrf().ignoringAntMatchers(csrfPatterns);    }    @Autowired    public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {//      auth.inMemoryAuthentication().withUser("123456").password("123456").roles("USER");         auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());    }    @Override    public void configure(WebSecurity web) throws Exception {        web.ignoring().antMatchers("/js/**", "/css/**", "/images/**", "/**/favicon.ico");    }}

实体类
entity
User

package com.sara.entity;import java.util.Date;import javax.persistence.*;public class User {    private Long id;    /**     * 登录用户名     */    private String username;    /**     * 密码     */    private String psw;    /**     * 用户手机     */    private String phone;    /**     * 支付宝账号     */    private String alipay;    /**     * 用户类型     */    private String type;    /**     * 注册时间     */    private Date createDate;    /**     * 用户等级     */    private String grade;    private Byte close;    public Long getId() {        return id;    }    public void setId(Long id) {        this.id = id;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPsw() {        return psw;    }    public void setPsw(String psw) {        this.psw = psw;    }    public String getPhone() {        return phone;    }    public void setPhone(String phone) {        this.phone = phone;    }    public String getAlipay() {        return alipay;    }    public void setAlipay(String alipay) {        this.alipay = alipay;    }    public String getType() {        return type;    }    public void setType(String type) {        this.type = type;    }    public Date getCreateDate() {        return createDate;    }    public void setCreateDate(Date createDate) {        this.createDate = createDate;    }    public String getGrade() {        return grade;    }    public void setGrade(String grade) {        this.grade = grade;    }    public Byte getClose() {        return close;    }    public void setClose(Byte close) {        this.close = close;    }}

UserVo

package com.sara.entity.vo;public class UserVo {    /**     * 登录用户名     */    private String username;    /**     * 密码     */    private String psw;    /**     * 用户手机     */    private String phone;    /**     * 支付宝账号     */    private String alipay;    /**     * 获取登录用户名     *     * @return username - 登录用户名     */    public String getUsername() {        return username;    }    /**     * 设置登录用户名     *     * @param username 登录用户名     */    public void setUsername(String username) {        this.username = username;    }    /**     * 获取密码     *     * @return psw - 密码     */    public String getPsw() {        return psw;    }    /**     * 设置密码     *     * @param psw 密码     */    public void setPsw(String psw) {        this.psw = psw;    }    /**     * 获取用户手机     *     * @return phone - 用户手机     */    public String getPhone() {        return phone;    }    /**     * 设置用户手机     *     * @param phone 用户手机     */    public void setPhone(String phone) {        this.phone = phone;    }    /**     * 获取支付宝账号     *     * @return alipay - 支付宝账号     */    public String getAlipay() {        return alipay;    }    /**     * 设置支付宝账号     *     * @param alipay 支付宝账号     */    public void setAlipay(String alipay) {        this.alipay = alipay;    }}

VO
userVo

package com.sara.entity.vo;public class UserVo {    /**     * 登录用户名     */    private String username;    /**     * 密码     */    private String psw;    /**     * 用户手机     */    private String phone;    /**     * 支付宝账号     */    private String alipay;    /**     * 获取登录用户名     *     * @return username - 登录用户名     */    public String getUsername() {        return username;    }    /**     * 设置登录用户名     *     * @param username 登录用户名     */    public void setUsername(String username) {        this.username = username;    }    /**     * 获取密码     *     * @return psw - 密码     */    public String getPsw() {        return psw;    }    /**     * 设置密码     *     * @param psw 密码     */    public void setPsw(String psw) {        this.psw = psw;    }    /**     * 获取用户手机     *     * @return phone - 用户手机     */    public String getPhone() {        return phone;    }    /**     * 设置用户手机     *     * @param phone 用户手机     */    public void setPhone(String phone) {        this.phone = phone;    }    /**     * 获取支付宝账号     *     * @return alipay - 支付宝账号     */    public String getAlipay() {        return alipay;    }    /**     * 设置支付宝账号     *     * @param alipay 支付宝账号     */    public void setAlipay(String alipay) {        this.alipay = alipay;    }}

UserMapper

package com.sara.mapper;import com.sara.entity.User;import tk.mybatis.mapper.common.Mapper;public interface UserMapper extends Mapper<User>{}

UserService

package com.sara.service;import com.sara.entity.User;import com.sara.entity.vo.UserVo;public interface UserService {    public User findOne(String userna);//  public void register(User userVo);}

UserServiceImpl

package com.sara.service.impl;import com.sara.entity.User;import com.sara.mapper.UserMapper;import com.sara.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.util.StringUtils;@Servicepublic class UserServiceImpl implements UserService {    @Autowired    private UserMapper userMapper;    @Override    public User findOne(String username) {//      if(StringUtils.isEmpty(username)){//          return null;//      }        User query = new User();        query.setUsername(username);        User user = userMapper.selectOne(query);        return user;    }////  @Override//  public void register(User userVo) {////  }}

UserController

package com.sara.controller;import com.sara.mapper.UserMapper;import com.sara.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping(value="/user")public class UserController {    @Autowired    private UserService userService;    @Autowired    private UserMapper userMapper;    @GetMapping(value = "/index")    public Object index(){//      return  userService.findOne("123456");        return  userMapper.selectAll();    }}