zoukankan      html  css  js  c++  java
  • 五、spring boot开发web应用-更为常用的mybatis

    第三节和第四节分别介绍了传统的JDBC方式和简单的JPA方式,但这两种方式在行业内使用的不多,更常见使用的是mybatis,下面我们就再次改造web应用,让其使用更为常见的mybatis方式。

    1.依赖引入

    要使用mybatis框架,首先要引入依赖,但spring boot data没有包含mybatis的依赖,那我们该如何查找mybatis的依赖呢?我们可以打开maven中央仓库官网https://mvnrepository.com,搜索mybatis进行查询,如下:

    image-20200917104109571

    找到你需要的内容MyBatis Spring Boot Starter,点击进去

    image-20200917104254758

    进去后,会列出所有版本信息,选择你想要的版本(一般不要选择最新的,而是选择使用人数最多的)点击进去

    进去后,可以根据使用的是maven、Gradle还是其它来查看依赖,我们的项目使用的是maven,所有拿到的依赖是:

     <!--mybatis-->
     <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.1</version>
     </dependency>

    2.创建mybatis的xml文件

    (1)在resources在创建mapper文件夹,用于存放xml文件

    (2)配置mapper路径

    在配置文件application.yml中添加下面配置(如果Mapper.java和Mapper.xml在同一个包下,可以不用设置)

     mybatis:
       # 如果Mapper.java和Mapper.xml在同一个包下,可以不用设置
       mapper-locations: classpath:mapper/*.xml

    (3)启动类添加Mapper全局扫描(如果不添加,也可以单独在指定的Dao类加@Mapper注解)

    package com.kinglead.demo;
     ​
     import org.mybatis.spring.annotation.MapperScan;
     import org.springframework.boot.SpringApplication;
     import org.springframework.boot.autoconfigure.SpringBootApplication;
     ​
     //@SpringBootApplication注解代表这是一个spring boot应用
     //它是一个组合注解
     //@SpringBootConfiguration注解将该类声明为配置类,相当于@Configuration的特殊形式
     //@EnableAutoConfiguration启动spring boot的自动配置
     //@ComponentScan启动组件扫描:将通过@Component、@Controller、@Service这样注解的类,注册为spring应用上下文的组件
     @MapperScan("com.kinglead.demo.dao") //Mapper全局扫描
     @SpringBootApplication
     public class SpringInitDemoApplication {
     ​
        /**
         * @param args 命令行参数
         */
        public static void main(String[] args) {
           SpringApplication.run(SpringInitDemoApplication.class, args);
        }
     ​
     }

    (4)创建xml文件mapper文件夹下

    UserDao.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.kinglead.demo.dao.UserDao"><resultMap type="com.kinglead.demo.entity.User" id="TUserMap">
             <result property="id" column="id" jdbcType="INTEGER"/>
             <result property="name" column="name" jdbcType="VARCHAR"/>
             <result property="password" column="password" jdbcType="VARCHAR"/>
         </resultMap>
     ​
     ​
         <!--通过实体作为筛选条件查询-->
         <select id="queryAll" resultMap="TUserMap">
             select
               id, name, password
             from t_user
             <where>
                 <if test="id != null">
                     and id = #{id}
                 </if>
                 <if test="name != null and name != ''">
                     and name = #{name}
                 </if>
                 <if test="password != null and password != ''">
                     and password = #{password}
                 </if>
             </where>
         </select><!--新增所有列-->
         <insert id="insert" keyProperty="id" useGeneratedKeys="true">
             insert into t_user(name, password)
             values (#{name}, #{password})
         </insert><!--根据用户名和密码查询-->
         <select id="findByNameAndPassword" resultMap="TUserMap">
             select id, name, password
             from t_user
             <where>
                 <if test="name != null and name != ''">
                     and name = #{name}
                 </if>
                 <if test="password != null and password != ''">
                     and password = #{password}
                 </if>
             </where>
         </select></mapper>

    3.改造Dao层,删除UserRepository,新增UserDao

    package com.kinglead.demo.dao;
     ​
     import com.kinglead.demo.entity.User;
     import org.apache.ibatis.annotations.Param;
     import org.springframework.stereotype.Component;
     ​
     import java.util.List;
     ​
     @Component
     public interface UserDao {
     ​
         /**
          * 新增用户
          */
         int insert(User user);
     ​
         /**
          * 通过用户名和密码查询用户
          */
         User findByNameAndPassword(@Param("name")String name, @Param("password") String password);
     ​
         /**
          * 查询用户列表
          */
         List<User> queryAll(User user);
     }

    4.改造UserServiceImpl实现类,注入UserDao

    package com.kinglead.demo.service.impl;
     ​
     import com.kinglead.demo.dao.UserDao;
     import com.kinglead.demo.entity.User;
     import com.kinglead.demo.service.UserService;
     import org.springframework.stereotype.Service;
     ​
     import javax.annotation.Resource;
     import java.util.List;
     ​
     @Service
     public class UserServiceImpl implements UserService {
     ​
         @Resource
         private UserDao userDao;
     ​
         /**
          * 新增用户
          */
         @Override
         public int insert(User user) {
             return userDao.insert(user);
         }
     ​
         /**
          * 通过用户名和密码查询用户
          */
         @Override
         public User queryByNameAndPassword(User user) {
             return userDao.findByNameAndPassword(user.getName(), user.getPassword());
         }
     ​
         /**
          * 查询用户列表
          */
         @Override
         public List<User> queryAll() {
             return userDao.queryAll(null);
         }
     ​
     }

    5.html页面和Controller保持不变

    6.测试

    访问请求http://localhost:8080/user/userList,同样能返回数据

     

    总结

    mybatis是现在行业内最流行框架,也是项目使用最多的框架,大家在实际项目技术选型时,可以大胆的选择mybatis。另外,由于mybatis在编写mapper.xml和dao文件上很费时,为了让开发人员专注于业务处理,现有很多IDEA插件能自动生成这些文件,如:EasyCode,mybatis generate等。笔者使用的是EasyCode,大家根据自己的喜好可以任选一款,至于工具的使用在这就不介绍了,后面有机会单独发文介绍。

    源码地址:https://github.com/kinglead2012/myblog

  • 相关阅读:
    打怪(CDQ分治+斜率优化)
    中缀表达式求值
    马拉车(manacher)算法
    后缀数组的求法及应用
    【最小生成树】藏宝图(prim)
    【最小生成树】prim算法
    [最近公共祖先]最近公共祖先(LCA)
    [思维]Supreme Number
    [模拟] Lattice's basics in digital electronics(2018沈阳赛区网络预赛)
    【搜索+思维】Distinctive Character
  • 原文地址:https://www.cnblogs.com/kinglead/p/13684340.html
Copyright © 2011-2022 走看看