• Mybatis介绍(一)


    这里介绍的mybatis比较简单, 我做为一个初学者, 记录下个人在学习中方法, 如果那里出错, 希望读者朋友们见谅.

    首先这里介绍一下我们下面用的表结构:

    author表是保存了作者的个人信息, 因为我们在这里做测试, 所以就简单的定义几个字段.

    blog表是保存谁写了博客的内容, 这里也是几个简单的字段.

    comment表是保存对哪篇博客评论, 也是几个简单的字段.

    注意: 这三张表的id都是自增型, 你也可以做其他的改变, 这里是为了方便.

    下面给出了几张表格创建的sql语句:

    CREATE TABLE `author` (
       `id` int(11) NOT NULL AUTO_INCREMENT,
       `name` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
       `age` int(5) NULL DEFAULT NULL,
       `email` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
       `country` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
       PRIMARY KEY (`id`) 
    );
    
    CREATE TABLE `blog` (
       `id` int(11) NOT NULL AUTO_INCREMENT,
       `authorid` int(11) NULL DEFAULT NULL,
       `title` varchar(35) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
       `mainbody` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
       `creattime` varchar(70) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
       PRIMARY KEY (`id`) 
    );
    
    CREATE TABLE `comment` (
       `id` int(11) NOT NULL AUTO_INCREMENT,
       `blogid` int(11) NULL DEFAULT NULL,
       `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
       `creattime` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
       PRIMARY KEY (`id`) 
    );

     使用maven+springmvc+mabatis+spring搭建web环境, 可以参考博客: https://www.cnblogs.com/jay36/p/7762448.html, 这里就不详细的介绍了.

     这里主要介绍mybatis的用法, 首先使用Mybatis Generator生成pojo/dao/mapping三个文件, 即实体类、DAO接口和Mapping映射文件.

     可以参考博客:  https://blog.csdn.net/zhshulin/article/details/23912615, 下面就开始简单介绍Mybatis的使用.

     1.  看一下三个表pojo(Plain Ordinary Java Object), 即实体类

    package com.springdemo.pojo;
    public class Author {
        private Integer id;
        private String name;
        private Integer age;
        private String email;
        private String country; 
        /* getting and setting function */
    }
    package com.springdemo.pojo;
    public class Blog {
        private Integer id;
        private Integer authorid;
        private String title;
        private String creattime;
        private String mainbody;
        /* getting and setting function */
    }
    package com.springdemo.pojo;
    public class Comment {
        private Integer id;
        private Integer blogid;
        private String creattime;
        private String content;
        /* getting and setting function */
    }
    View Code

    2.  再看一下三个表的dao(Data Access Object), 即dao接口

    package com.springdemo.dao
    public interface AuthorMapper {
        int deleteByPrimaryKey(Integer id);
        int insert(Author record);
        int insertSelective(Author record);
        Author selectByPrimaryKey(Integer id);
        int updateByPrimaryKeySelective(Author record);
        int updateByPrimaryKey(Author record);
    }
    package com.springdemo.dao
    public interface BlogMapper {
        int deleteByPrimaryKey(Integer id);
        int insert(Blog record);
        int insertSelective(Blog record);
        Blog selectByPrimaryKey(Integer id);
        int updateByPrimaryKeySelective(Blog record);
        int updateByPrimaryKeyWithBLOBs(Blog record);
        int updateByPrimaryKey(Blog record);
    }
    package com.springdemo.dao
    public interface CommentMapper {
        int deleteByPrimaryKey(Integer id);
        int insert(Comment record);
        int insertSelective(Comment record);
        Comment selectByPrimaryKey(Integer id);
        int updateByPrimaryKeySelective(Comment record);
        int updateByPrimaryKeyWithBLOBs(Comment record);
        int updateByPrimaryKey(Comment record);
    }
    View Code

    3.  再看一下三个表的mapping, 即Mapping映射

    <?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.springdemo.dao.AuthorMapper" >
      <resultMap id="BaseResultMap" type="com.springdemo.pojo.Author" >
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="name" property="name" jdbcType="VARCHAR" />
        <result column="age" property="age" jdbcType="INTEGER" />
        <result column="email" property="email" jdbcType="VARCHAR" />
        <result column="country" property="country" jdbcType="VARCHAR" />
      </resultMap>
      <sql id="Base_Column_List" >
        id, name, age, email, country
      </sql>
      <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
        select 
        <include refid="Base_Column_List" />
        from author
        where id = #{id,jdbcType=INTEGER}
      </select>
      <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
        delete from author
        where id = #{id,jdbcType=INTEGER}
      </delete>
      <insert id="insert" parameterType="com.springdemo.pojo.Author" >
        insert into author (id, name, age, 
          email, country)
        values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER}, 
          #{email,jdbcType=VARCHAR}, #{country,jdbcType=VARCHAR})
      </insert>
      <insert id="insertSelective" parameterType="com.springdemo.pojo.Author" >
        insert into author
        <trim prefix="(" suffix=")" suffixOverrides="," >
          <if test="id != null" >
            id,
          </if>
          <if test="name != null" >
            name,
          </if>
          <if test="age != null" >
            age,
          </if>
          <if test="email != null" >
            email,
          </if>
          <if test="country != null" >
            country,
          </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides="," >
          <if test="id != null" >
            #{id,jdbcType=INTEGER},
          </if>
          <if test="name != null" >
            #{name,jdbcType=VARCHAR},
          </if>
          <if test="age != null" >
            #{age,jdbcType=INTEGER},
          </if>
          <if test="email != null" >
            #{email,jdbcType=VARCHAR},
          </if>
          <if test="country != null" >
            #{country,jdbcType=VARCHAR},
          </if>
        </trim>
      </insert>
      <update id="updateByPrimaryKeySelective" parameterType="com.springdemo.pojo.Author" >
        update author
        <set >
          <if test="name != null" >
            name = #{name,jdbcType=VARCHAR},
          </if>
          <if test="age != null" >
            age = #{age,jdbcType=INTEGER},
          </if>
          <if test="email != null" >
            email = #{email,jdbcType=VARCHAR},
          </if>
          <if test="country != null" >
            country = #{country,jdbcType=VARCHAR},
          </if>
        </set>
        where id = #{id,jdbcType=INTEGER}
      </update>
      <update id="updateByPrimaryKey" parameterType="com.springdemo.pojo.Author" >
        update author
        set name = #{name,jdbcType=VARCHAR},
          age = #{age,jdbcType=INTEGER},
          email = #{email,jdbcType=VARCHAR},
          country = #{country,jdbcType=VARCHAR}
        where id = #{id,jdbcType=INTEGER}
      </update>
    </mapper>
    
    <?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.springdemo.dao.BlogMapper" >
      <resultMap id="BaseResultMap" type="com.springdemo.pojo.Blog" >
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="authorid" property="authorid" jdbcType="INTEGER" />
        <result column="title" property="title" jdbcType="VARCHAR" />
        <result column="creattime" property="creattime" jdbcType="VARCHAR" />
      </resultMap>
      <resultMap id="ResultMapWithBLOBs" type="com.springdemo.pojo.Blog" extends="BaseResultMap" >
        <result column="mainbody" property="mainbody" jdbcType="LONGVARCHAR" />
      </resultMap>
      <sql id="Base_Column_List" >
        id, authorid, title, creattime
      </sql>
      <sql id="Blob_Column_List" >
        mainbody
      </sql>
      <select id="selectByPrimaryKey" resultMap="ResultMapWithBLOBs" parameterType="java.lang.Integer" >
        select 
        <include refid="Base_Column_List" />
        ,
        <include refid="Blob_Column_List" />
        from blog
        where id = #{id,jdbcType=INTEGER}
      </select>
      <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
        delete from blog
        where id = #{id,jdbcType=INTEGER}
      </delete>
      <insert id="insert" parameterType="com.springdemo.pojo.Blog" >
        insert into blog (id, authorid, title, 
          creattime, mainbody)
        values (#{id,jdbcType=INTEGER}, #{authorid,jdbcType=INTEGER}, #{title,jdbcType=VARCHAR}, 
          #{creattime,jdbcType=VARCHAR}, #{mainbody,jdbcType=LONGVARCHAR})
      </insert>
      <insert id="insertSelective" parameterType="com.springdemo.pojo.Blog" >
        insert into blog
        <trim prefix="(" suffix=")" suffixOverrides="," >
          <if test="id != null" >
            id,
          </if>
          <if test="authorid != null" >
            authorid,
          </if>
          <if test="title != null" >
            title,
          </if>
          <if test="creattime != null" >
            creattime,
          </if>
          <if test="mainbody != null" >
            mainbody,
          </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides="," >
          <if test="id != null" >
            #{id,jdbcType=INTEGER},
          </if>
          <if test="authorid != null" >
            #{authorid,jdbcType=INTEGER},
          </if>
          <if test="title != null" >
            #{title,jdbcType=VARCHAR},
          </if>
          <if test="creattime != null" >
            #{creattime,jdbcType=VARCHAR},
          </if>
          <if test="mainbody != null" >
            #{mainbody,jdbcType=LONGVARCHAR},
          </if>
        </trim>
      </insert>
      <update id="updateByPrimaryKeySelective" parameterType="com.springdemo.pojo.Blog" >
        update blog
        <set >
          <if test="authorid != null" >
            authorid = #{authorid,jdbcType=INTEGER},
          </if>
          <if test="title != null" >
            title = #{title,jdbcType=VARCHAR},
          </if>
          <if test="creattime != null" >
            creattime = #{creattime,jdbcType=VARCHAR},
          </if>
          <if test="mainbody != null" >
            mainbody = #{mainbody,jdbcType=LONGVARCHAR},
          </if>
        </set>
        where id = #{id,jdbcType=INTEGER}
      </update>
      <update id="updateByPrimaryKeyWithBLOBs" parameterType="com.springdemo.pojo.Blog" >
        update blog
        set authorid = #{authorid,jdbcType=INTEGER},
          title = #{title,jdbcType=VARCHAR},
          creattime = #{creattime,jdbcType=VARCHAR},
          mainbody = #{mainbody,jdbcType=LONGVARCHAR}
        where id = #{id,jdbcType=INTEGER}
      </update>
      <update id="updateByPrimaryKey" parameterType="com.springdemo.pojo.Blog" >
        update blog
        set authorid = #{authorid,jdbcType=INTEGER},
          title = #{title,jdbcType=VARCHAR},
          creattime = #{creattime,jdbcType=VARCHAR}
        where id = #{id,jdbcType=INTEGER}
      </update>
    </mapper>
    
    <?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.springdemo.dao.CommentMapper" >
      <resultMap id="BaseResultMap" type="com.springdemo.pojo.Comment" >
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="blogid" property="blogid" jdbcType="INTEGER" />
        <result column="creattime" property="creattime" jdbcType="VARCHAR" />
      </resultMap>
      <resultMap id="ResultMapWithBLOBs" type="com.springdemo.pojo.Comment" extends="BaseResultMap" >
        <result column="content" property="content" jdbcType="LONGVARCHAR" />
      </resultMap>
      <sql id="Base_Column_List" >
        id, blogid, creattime
      </sql>
      <sql id="Blob_Column_List" >
        content
      </sql>
      <select id="selectByPrimaryKey" resultMap="ResultMapWithBLOBs" parameterType="java.lang.Integer" >
        select 
        <include refid="Base_Column_List" />
        ,
        <include refid="Blob_Column_List" />
        from comment
        where id = #{id,jdbcType=INTEGER}
      </select>
      <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
        delete from comment
        where id = #{id,jdbcType=INTEGER}
      </delete>
      <insert id="insert" parameterType="com.springdemo.pojo.Comment" >
        insert into comment (id, blogid, creattime, 
          content)
        values (#{id,jdbcType=INTEGER}, #{blogid,jdbcType=INTEGER}, #{creattime,jdbcType=VARCHAR}, 
          #{content,jdbcType=LONGVARCHAR})
      </insert>
      <insert id="insertSelective" parameterType="com.springdemo.pojo.Comment" >
        insert into comment
        <trim prefix="(" suffix=")" suffixOverrides="," >
          <if test="id != null" >
            id,
          </if>
          <if test="blogid != null" >
            blogid,
          </if>
          <if test="creattime != null" >
            creattime,
          </if>
          <if test="content != null" >
            content,
          </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides="," >
          <if test="id != null" >
            #{id,jdbcType=INTEGER},
          </if>
          <if test="blogid != null" >
            #{blogid,jdbcType=INTEGER},
          </if>
          <if test="creattime != null" >
            #{creattime,jdbcType=VARCHAR},
          </if>
          <if test="content != null" >
            #{content,jdbcType=LONGVARCHAR},
          </if>
        </trim>
      </insert>
      <update id="updateByPrimaryKeySelective" parameterType="com.springdemo.pojo.Comment" >
        update comment
        <set >
          <if test="blogid != null" >
            blogid = #{blogid,jdbcType=INTEGER},
          </if>
          <if test="creattime != null" >
            creattime = #{creattime,jdbcType=VARCHAR},
          </if>
          <if test="content != null" >
            content = #{content,jdbcType=LONGVARCHAR},
          </if>
        </set>
        where id = #{id,jdbcType=INTEGER}
      </update>
      <update id="updateByPrimaryKeyWithBLOBs" parameterType="com.springdemo.pojo.Comment" >
        update comment
        set blogid = #{blogid,jdbcType=INTEGER},
          creattime = #{creattime,jdbcType=VARCHAR},
          content = #{content,jdbcType=LONGVARCHAR}
        where id = #{id,jdbcType=INTEGER}
      </update>
      <update id="updateByPrimaryKey" parameterType="com.springdemo.pojo.Comment" >
        update comment
        set blogid = #{blogid,jdbcType=INTEGER},
          creattime = #{creattime,jdbcType=VARCHAR}
        where id = #{id,jdbcType=INTEGER}
      </update>
    </mapper>
    View Code

    mybatis的使用, 关键在于要要写好mapping映射, 使用工具生成的是最简单的curd的方法, 现在我们来增加一个我们自定义的方法.

    首先在mapping的文件中写一个映射, 我们就在BlogMapper.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.springdemo.dao.BlogMapper" >
      ......
      <insert id="insertBlogByList" useGeneratedKeys="true"
        keyProperty="id" parameterType="java.util.List">
          insert into blog (authorid, title, creattime, mainbody) values
          <foreach item="item" collection="list" separator=",">
            (#{item.authorid,jdbcType=INTEGER}, #{item.title,jdbcType=VARCHAR}, 
            #{item.creattime,jdbcType=VARCHAR}, #{item.mainbody,jdbcType=LONGVARCHAR})
          </foreach>
      </insert>
      ...... 
    </mapper>

    这段xml的代码主要就是批量插入数据, 而且id是自增长的,  数据以list的形式传入进来, 然后循环插入到blog表中.

    然后我们要在BlogMapper.java的dao中加一个接口, 代码如下:

    package com.springdemo.dao;
    public interface BlogMapper {
        ...... 
        int insertBlogByList(List<Blog> listBlog);
        ......
    }
    注意这里的接口名字要和我们之前在xml中加入的id值相同才行, 因为这样mybatis才会映射.
    即在BlogMapper.xml中写的insert语句id是insertBlogByList,
    那么这里的定义的接口必须也是这个, 而且参数的类型也必须一样, 这一点切记。

    最后我们要在controller中去调用(因为这里我是用springmvc写的,所有用mvc思想去写调用,你也可以随便写一个方法去调用, 这里给出我的调用方法):

    //下面是BlogController.java的代码
    package com.springdemo.controller;
    
    @Controller
    @RequestMapping(value = "/blog")
    public class BlogController {
        
        private static final Logger LOG = LogManager.getLogger();
        
        @Autowired
        private BlogService blogService;
            
       //这里是把前端的值获取到,然后再存入到数据库中, 最后返回状态
        @RequestMapping(value="/insert", method = RequestMethod.POST)
        public void insertBlog(HttpServletRequest request, HttpServletResponse response) {
            String status = "{"status":"failure"}";
            int authorid = Integer.parseInt(request.getParameter("authorid"));
            String title = String.valueOf(request.getParameter("title"));
            String mainbody = String.valueOf(request.getParameter("mainbody"));
                
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date now = new Date();
            String creattime = df.format(now);
            
            List<Blog> listBlog = new ArrayList<Blog>();
            Blog blog = new Blog();
            blog.setAuthorid(authorid);
            blog.setTitle(title);
            blog.setMainbody(mainbody);
            blog.setCreattime(creattime);
            listBlog.add(blog);
            
            int affectRow = blogService.insertBlogByList(listBlog);
            if (affectRow != 0) {
                status = "{"status":"success"}";
            }
            
            response.setContentType("text/html;UTF-8");
            try (PrintWriter writer = response.getWriter();) {
                writer.write(status);
                writer.flush();
            } catch (IOException e) {
                LOG.error(e.getMessage(), e);
            }
        }    
    }
    
    ----------------------------------------------------------
    // 下面是BlogService.java的代码
    package com.springdemo.service;
    import java.util.List;
    
    // 这里不需要继承BlogMapper接口, 通过spring注解直接使用 @Service(value
    ="blogService") public class BlogService { @Resource private BlogMapper blogMapper; public int insertBlogByList(List<Blog> listBlog) { int affectRow = 0; affectRow = this.blogMapper.insertBlogByList(listBlog); return affectRow; } }

     这样就简单的完成了在xml中建立sql语句, 然后通过映射转换到java中, 最后去执行.

     待续......

  • 相关阅读:
    设计一个圆柱体类,计算表面积及体积。建立一个半径为3、高为3.5的圆柱体,输出其表面积及体积
    写一个方法完成如下功能,判断从文本框textbox1输入的一个字符,如果是数字则求该数字的阶乘,如果是小写字条,则转换为大写,大写字符不变,结果在文本框textbox2中显示
    写一方法用来计算1+2+3+...n,其中n作为参数输入,返回值可以由方法名返回,也可以由参数返回
    winform控件记录
    写4个同名方法,实现两个整数、两个实数,一个实数一个整数,一个整数一个实数之间的求和。在主调函数中调用这4个方法计算相关的值。(方法的重载)
    写一方法计算实现任意个整数之和.在主调函数中调用该函数,实现任意个数之和。(使用params参数)
    在主函数中提示用户输入用户名和密码。另写一方法来判断用户输入是否正确。该方法分别返回一个bool类型的登录结果和和一个string类型的登录信息。如登录成功,返回true及“登录成功”,若登录失败则返回false及“用户名错误”或“密码错误”(使用out参数)
    Linux下使用Kickstart自动化安装平台架构
    Day10 多线程理论 开启线程
    关闭ipv6的方法
  • 原文地址:https://www.cnblogs.com/xumBlog/p/8861698.html
Copyright © 2020-2023  润新知