springboot集成mybatis处理json类型

springboot集成mybatis处理json类型数据

今天做了一个需求,需要将一个字段定义为json类型,加以记录

  1. 使用的mysql数据库,在数据库中新建一个表,parameter字段为json类型
CREATE TABLE `sms_template` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `template_name` varchar(30) NOT NULL COMMENT '模板名称',
  `template_code` varchar(20) DEFAULT NULL COMMENT '模板编号',
  `sign_name` varchar(16) DEFAULT NULL COMMENT '短信签名',
  `template_content` varchar(100) DEFAULT NULL COMMENT '短信模板内容',
  `parameter` json DEFAULT NULL COMMENT '变量参数',
  `del_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '删除标识  0:未删除 1:删除',
  `operator_code` varchar(11) DEFAULT NULL,
  `operator_name` varchar(10) NOT NULL COMMENT '创建人名称',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='短信模板表';
  1. mybatis处理json配置类
@MappedTypes(JSONObject.class)
@MappedJdbcTypes(JdbcType.VARCHAR)
public class MySqlJsonHandler extends BaseTypeHandler<JSONObject> {
    /**
     * 设置非空参数
     * @param ps
     * @param i
     * @param parameter
     * @param jdbcType
     * @throws SQLException
     */
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, JSONObject parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i,String.valueOf(parameter.toJSONString()));
    }
    /**
     * 根据列名,获取可以为空的结果
     * @param rs
     * @param columnName
     * @return
     * @throws SQLException
     */
    @Override
    public JSONObject getNullableResult(ResultSet rs, String columnName) throws SQLException {
        String sqlJson = rs.getString(columnName);
        if (null != sqlJson) {
            return JSONObject.parseObject(sqlJson);
        }
        return null;
    }
    /**
     * 根据列索引,获取可以为内控的接口
     * @param rs
     * @param columnIndex
     * @return
     * @throws SQLException
     */
    @Override
    public JSONObject getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        String sqlJson = rs.getString(columnIndex);
        if (null != sqlJson) {
            return JSONObject.parseObject(sqlJson);
        }
        return null;
    }
    /**
     *
     * @param cs
     * @param columnIndex
     * @return
     * @throws SQLException
     */
    @Override
    public JSONObject getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        String sqlJson = cs.getNString(columnIndex);
        if (null != sqlJson) {
            return JSONObject.parseObject(sqlJson);
        }
        return null;
    }
}
  1. 在xml文件中注明typeHandler
<resultMap id="BaseResultMap" type="cn.net.yzl.sms.model.entity.SmsTemplate">
        <!--@Table sms_template-->
        <result property="id" column="id" jdbcType="INTEGER"/>
        <result property="templateName" column="template_name" jdbcType="VARCHAR"/>
        <result property="templateCode" column="template_code" jdbcType="VARCHAR"/>
        <result property="templateContent" column="template_content" jdbcType="VARCHAR"/>
        <result property="parameter" column="parameter" typeHandler="cn.net.yzl.sms.config.mybatis.MySqlJsonHandler"/>
        <result property="operatorCode" column="operator_code" jdbcType="VARCHAR"/>
        <result property="operatorName" column="operator_name" jdbcType="VARCHAR"/>
        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
    </resultMap>
  1. 新增语句
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
        insert into sms_template
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="templateName != null and '' != templateName">
                template_name,
            </if>
            <if test="templateCode != null and '' != templateCode">
                template_code,
            </if>
            <if test="templateContent != null and '' != templateContent">
                template_content,
            </if>
            <if test="parameter != null">
                parameter,
            </if>
            <if test="operatorCode != null and '' != operatorCode">
                operator_code,
            </if>
            <if test="operatorName != null and '' != operatorName">
                operator_name,
            </if>
            <if test="updateTime != null">
                update_time,
            </if>
            <if test="createTime != null">
                create_time
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="templateName != null and '' != templateName">
                #{templateName},
            </if>
            <if test="templateCode != null and '' != templateCode">
                #{templateCode},
            </if>
            <if test="templateContent != null and '' != templateContent">
                #{templateContent},
            </if>
            <if test="parameter != null">
                #{parameter,typeHandler=cn.net.yzl.sms.config.mybatis.MySqlJsonHandler},
            </if>
            <if test="operatorCode != null and '' != operatorCode">
                #{operatorCode},
            </if>
            <if test="operatorName != null and '' != operatorName">
                #{operatorName},
            </if>
            <if test="updateTime != null">
                #{updateTime},
            </if>
            <if test="createTime != null">
                #{createTime}
            </if>
        </trim>
    </insert>

在新增的字段上加上typeHandler即可
5. 查询语句

<select id="queryByName" parameterType="com.ttao.sms.vo.SmsTemplateQueryVO"
            resultMap="BaseResultMap" resultType="com.ttao.sms.dto.SmsTemplateDTO">
        select
        <include refid="Base_Column_List"/>
        from sms_template
        where template_name = #{tempName}
        and del_flag = 0
    </select>

查询时加上先前定义好的resultMap

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Spring Boot 是一个基于 Java 的开发框架,它简化了 Spring 应用程序的配置和部署过程。MyBatis 是一种能够对关系型数据库进行持久化操作的框架。而 Layui 是一个简洁易用的前端框架,它能帮助开发者快速构建出美观的用户界面。 使用 Spring Boot 结合 MyBatis 实现新增数据的功能非常简单。首先需要在项目的 pom.xml 文件中引入相关的依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>版本号</version> </dependency> ``` 然后,在 Spring Boot 的配置文件 application.properties 中配置数据库连接信息: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/数据库名 spring.datasource.username=用户名 spring.datasource.password=密码 spring.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 接下来,创建一个实体类,用于表示数据库中的一张表: ```java @Entity @Table(name = "表名") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Integer age; // 省略getter和setter方法 } ``` 然后,创建一个 Mapper 接口,用于定义对数据库的增删改查操作: ```java @Repository public interface UserMapper extends Mapper<User> { } ``` 在 Service 层中调用 Mapper 接口的方法,实现对数据库的操作: ```java @Service public class UserService { @Autowired private UserMapper userMapper; public void addUser(User user) { userMapper.insert(user); } } ``` 最后,在前端页面中使用 Layui 的表单组件,通过 Ajax 发送请求,将数据提交给后端: ```html <form class="layui-form" onsubmit="return false;"> <div class="layui-form-item"> <label class="layui-form-label">姓名</label> <div class="layui-input-block"> <input type="text" name="name" placeholder="请输入姓名" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">年龄</label> <div class="layui-input-block"> <input type="text" name="age" placeholder="请输入年龄" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="submit">提交</button> </div> </div> </form> <script> layui.use(['form', 'layer'], function() { var form = layui.form; var layer = layui.layer; // 监听提交事件 form.on('submit(submit)', function(data) { // 获取表单数据 var name = data.field.name; var age = data.field.age; // 发送 Ajax 请求,将数据提交给后端 $.ajax({ url: '后端接口地址', type: 'post', dataType: 'json', data: { name: name, age: age }, success: function(res) { if (res.code === 0) { layer.msg('新增成功'); } else { layer.msg('新增失败'); } }, error: function() { layer.msg('网络错误'); } }); return false; }); }); // 引入 layui 的 css 和 js 文件 </script> ``` 以上就是使用 Spring Boot 和 MyBatis 实现新增数据并结合 Layui 实现前端页面的简单示例。通过这种方式,我们可以快速实现对数据库的增删改查操作,并将数据以美观的方式展示给用户。 ### 回答2: Spring Boot是一个用于构建Java应用程序的开发框架,它提供了一种快速、方便的方式来配置和构建独立的、基于Spring的应用程序。而MyBatis是一个持久层框架,它可以将数据库操作与Java对象的映射关系进行配置,简化了数据库操作的编写过程。 在Spring Boot中,我们可以通过集成MyBatis来实现对数据库的访问。首先,我们需要在项目的pom.xml文件中添加MyBatisMyBatis-Spring的依赖: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> 然后,在application.properties或application.yml文件中配置数据库的相关信息,包括数据库的URL、用户名、密码等。在配置完成后,我们就可以使用MyBatis进行数据库操作了。 在新增数据方面,我们可以定义一个POJO类来表示数据库中的表。然后,通过在接口中定义相应的方法,使用@Insert注解标记需要进行插入操作的方法。在方法中,我们可以使用@Param注解来传递参数,将数据插入到数据库中。 在前端方面,我们可以使用Layui作为前端框架来构建用户界面。Layui是一个模块化的前端框架,提供了一系列的组件,包括表格、表单、弹窗等,使得前端开发更加简单和高效。 在新增数据的界面中,我们可以使用Layui的表单组件来收集用户输入的数据。然后,使用Ajax来将数据发送到后端,调用对应的接口实现数据的新增操作。在后端接收到数据后,通过MyBatis将数据插入到数据库中。 综上所述,通过Spring Boot集成MyBatis实现数据的新增操作,再配合Layui构建前端界面,可以快速、方便地实现数据的录入和展示功能。这样可以大大提高开发效率,减少重复的编码工作。 ### 回答3: Spring Boot是一个开发框架,它简化了基于Java的应用程序的开发过程,并且提供了很多开箱即用的功能。MyBatis是一个持久化框架,它可以帮助我们更方便地访问数据库。 要实现新增的功能,我们可以结合Spring Boot和MyBatis来实现。下面是一个简单的示例: 首先,我们需要创建一个Spring Boot项目。你可以通过 https://start.spring.io/ 或者使用IDE的创建项目向导来创建一个空的Spring Boot项目。 接下来,我们需要集成MyBatis。在Spring Boot中,我们可以通过在pom.xml文件中添加MyBatis的依赖来实现。例如,可以添加以下依赖: ```xml <dependencies> <!-- 添加Spring Boot依赖 --> <!-- 添加MyBatis依赖 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <!-- 添加数据库驱动依赖 --> </dependencies> ``` 然后,我们需要配置MyBatis。可以在application.properties文件中添加以下配置: ```properties # MyBatis配置 mybatis.mapper-locations=classpath*:mapper/**/*.xml mybatis.type-aliases-package=com.example.demo.entity ``` 接下来,我们需要定义一个实体类和一个Mapper接口。实体类对应数据库中的表,Mapper接口定义了对表的操作方法。 ```java // 实体类 @Data public class User { private Long id; private String name; private Integer age; } // Mapper接口 @Mapper public interface UserMapper { void insert(User user); } ``` 最后,我们可以在Controller中使用Mapper来实现新增功能。例如,可以添加以下代码: ```java @Controller public class UserController { @Autowired private UserMapper userMapper; @PostMapping("/add") public String addUser(User user) { userMapper.insert(user); return "success"; } } ``` 现在,我们可以使用Layui来实现前端页面。在前端页面中,我们可以通过发送POST请求来调用Controller中的addUser方法,从而实现新增用户的功能。具体的前端代码可以参考Layui的文档。 以上是一个简单的示例,演示了如何使用Spring Boot和MyBatis实现新增功能,并结合Layui来实现前端页面。实际项目中可能会更加复杂,但基本的原理是相同的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开始摆烂ing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值