使用MyBatis操作 数据库text类型时 有“坑”!

转自:OnyWang 的《Spring和MyBatis整合自动生成代码里面text类型坑》

原址:https://www.jianshu.com/p/8e035078b8e5

 

 

Spring和MyBatis整合以后,使用自动生成代码工具生成dao和mapper配置文件,生成步骤如下(以Intelli idea为例)。

  1. 编写生成代码配置文件generatorConfig.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>
    <classPathEntry location="D:\dev\maven\repository\mysql\mysql-connector-java\5.1.39\mysql-connector-java-5.1.39.jar"/>
    <context id="DB2Tables" defaultModelType="flat" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="false"/>
        </commentGenerator>
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mycollege?characterEncoding=utf-8"
                        userId="root"
                        password="root">
        </jdbcConnection>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>


        <!-- 生成模型的包名和位置  -->
        <javaModelGenerator targetPackage="com.cx.elearnning.model"
                            targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- generate xml -->
        <sqlMapGenerator targetPackage="/"
                         targetProject="src/main/resources/mapper">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- generate Mapper -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.cx.elearnning.dao"
                             targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
      <!--需要自动生成的表名和对应的model名-->
        <table tableName="sys_user" domainObjectName="SysUser"></table>


    </context>
</generatorConfiguration>
  1. 配置如下maven运行命令。

     

    maven运行命令.png

  2. 运行generatorcode即可。

问题描述

假如数据库表里面存在text或者blob字段。自动生成的数据库配置文件如下,会多出几个以withBlobs结尾的方法和resultMap:

<!--仅仅贴上不一样的部分-->
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.cx.elearnning.model.EduWebsiteProfile">
    <!--
      WARNING - @mbggenerated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    <result column="DESCIPTION" jdbcType="LONGVARCHAR" property="desciption" />
  </resultMap>


<select id="selectByExampleWithBLOBs" parameterType="com.cx.elearnning.model.EduWebsiteProfileExample" resultMap="ResultMapWithBLOBs">
    <!--
      WARNING - @mbggenerated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    select
    <if test="distinct">
      distinct
    </if>
    <include refid="Base_Column_List" />
    ,
    <include refid="Blob_Column_List" />
    from edu_website_profile
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
    <if test="orderByClause != null">
      order by ${orderByClause}
    </if>
  </select>

假如此时查询数据或者更新数据的使用仍然使用selectByExample或者updateByExample,得到的text或者blob数据是null。

正确做法

应该使用selectByExampleWithBLOBs或者updateByExampleWithBLOBs这两个方法。

大爷你好,看您心情。

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是一个基本的用户登录界面代码,使用MyBatis连接数据库: UserMapper.xml文件: ```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.example.mapper.UserMapper"> <select id="getUserByUsernameAndPassword" parameterType="map" resultType="com.example.bean.User"> SELECT * FROM user WHERE username=#{username} AND password=#{password} </select> </mapper> ``` UserMapper接口: ```java package com.example.mapper; import java.util.Map; import com.example.bean.User; public interface UserMapper { User getUserByUsernameAndPassword(Map<String, Object> map); } ``` UserDaoImpl类: ```java package com.example.dao.impl; import java.util.HashMap; import java.util.Map; import org.apache.ibatis.session.SqlSession; import com.example.bean.User; import com.example.dao.UserDao; import com.example.mapper.UserMapper; import com.example.util.MyBatisUtil; public class UserDaoImpl implements UserDao { @Override public User getUserByUsernameAndPassword(String username, String password) { SqlSession sqlSession = MyBatisUtil.getSqlSession(); try { UserMapper userMapper = sqlSession.getMapper(UserMapper.class); Map<String, Object> map = new HashMap<>(); map.put("username", username); map.put("password", password); User user = userMapper.getUserByUsernameAndPassword(map); return user; } finally { sqlSession.close(); } } } ``` UserController类: ```java package com.example.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import com.example.bean.User; import com.example.dao.UserDao; import com.example.dao.impl.UserDaoImpl; @Controller public class UserController { @RequestMapping(value = "/login", method = RequestMethod.POST) public String login(HttpServletRequest request, HttpServletResponse response, @RequestParam("username") String username, @RequestParam("password") String password) { UserDao userDao = new UserDaoImpl(); User user = userDao.getUserByUsernameAndPassword(username, password); if (user != null) { HttpSession session = request.getSession(); session.setAttribute("user", user); return "redirect:/home"; } else { request.setAttribute("errorMsg", "用户名或密码错误"); return "login"; } } } ``` login.jsp页面: ```html <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户登录</title> </head> <body> <h1>用户登录</h1> <% String errorMsg = (String) request.getAttribute("errorMsg"); %> <% if (errorMsg != null) { %> <p style="color: red;"><%=errorMsg%></p> <% } %> <form method="post" action="${pageContext.request.contextPath}/login"> <label for="username">用户名:</label> <input type="text" id="username" name="username"><br><br> <label for="password">密码:</label> <input type="password" id="password" name="password"><br><br> <input type="submit" value="登录"> </form> </body> </html> ``` home.jsp页面: ```html <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Home</title> </head> <body> <h1>Welcome, ${user.username}!</h1> <p>Your password is: ${user.password}</p> </body> </html> ``` 以上代码可以实现一个简单的用户登录功能,使用MyBatis连接数据库
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值