tkMapper的使用

大家好,又见面了,我是你们的朋友全栈君。

Maven引入

<dependency>

<groupId>tk.mybatis</groupId>

<artifactId>mapper-spring-boot-starter</artifactId>

<version>2.1.5</version>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.mybatis.spring.boot</groupId>

<artifactId>mybatis-spring-boot-starter</artifactId>

<version>2.2.0</version>

</dependency>

<dependency>

<groupId>org.projectlombok</groupId>

<artifactId>lombok</artifactId>

<optional>true</optional>

</dependency>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<scope>runtime</scope>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.12</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<scope>test</scope>

</dependency>

创建实体类

User.java类

package com.bruce.entity;

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

import lombok.ToString;

import javax.persistence.Column;

import javax.persistence.Id;

import java.util.Date;

import java.util.List;

@Data

@AllArgsConstructor

@NoArgsConstructor

@ToString

public class Users {

@Id

private Integer userId;

@Column(name = “username”)

private String userName;

@Column(name = “password”)

private String userPassword;

@Column(name = “nickname”)

private String nickName;

@Column(name = “realname”)

private String userRealName;

private String userImg;

private Integer userAge;

private String userMobile;

private String userEmail;

private Boolean userSex;

private Date userBirth;

private Date userRegtime;

private Date userModtime;

private List<Orders> ordersList;

}

Orders.java 类

package com.bruce.entity;

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

import lombok.ToString;

import javax.persistence.Id;

@Data

@AllArgsConstructor

@NoArgsConstructor

@ToString

public class Orders {

@Id

private String orderId;

private Long userId;

private String receiverName;

private String receiverMobile;

private String receiverAddress;

}

创建DAO接口

tkMapper已经完成了对单表的通用操作的封装,封装在Mapper接口和MySqlMapper接口;因此如果我们要完成对单表的操作,只需自定义DAO接口继承Mapper接口和MySqlMapper接口

@Repository

public interface UserDAO extends Mapper<User>, MySqlMapper<Users> {

public Users selectByUsername(String username); //tkMapper中默认的方法不能满足当前要求可以自定义方法

}

UserMapper.xml

如果tkMybatis默认的方法不能满足当下的要求可以,将自定义的方法写入Mapper.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.bruce.mapper.UsersDao” >

<!–namespace根据自己需要创建的的mapper的路径和名称填写–>

<resultMap id=”userMap” type=”com.bruce.entity.Users”>

<id column=”user_id” property=”userId”></id>

<result column=”username” property=”userName”></result>

<result column=”password” property=”userPassword”></result>

<result column=”nickname” property=”nickName”></result>

<result column=”realname” property=”userRealName”></result>

<result column=”user_img” property=”userImg”></result>

<result column=”user_mobile” property=”userMobile”></result>

<result column=”user_email” property=”userEmail”></result>

<result column=”user_sex” property=”userSex”></result>

<result column=”user_birth” property=”userBirth”></result>

<result column=”user_regtime” property=”userRegtime”></result>

<result column=”user_modtime” property=”userModtime”></result>

<result column=”user_age” property=”userAge”></result>

<collection property=”ordersList” ofType=”com.bruce.entity.Orders”>

<id column=”order_id” property=”orderId”></id>

<result column=”receiver_name” property=”receiverName”></result>

<result column=”receiver_mobile” property=”receiverMobile”></result>

<result column=”receiver_address” property=”receiverAddress”></result>

</collection>

</resultMap>

<select id=”selectByUsername” resultMap=”userMap”>

select

u.user_id,

u.username,

u.password,

u.nickname,

u.realname,

u.user_img,

u.user_mobile,

u.user_email,

u.user_sex,

u.user_birth,

u.user_regtime,

u.user_modtime,

u.user_age,

o.order_id,

o.receiver_name,

o.receiver_mobile,

o.receiver_address

from users u inner join orders o

on u.user_id = o.user_id

</select>

</mapper>

修改启动类的`@MapperScan`注解的包

配置的MapperScan不是mybatis的而是`tk.mybatis.spring.annotation.MapperScan`

import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication

@MapperScan(“com.bruce.mapper”)

public class TkmapperDemoApplication {

public static void main(String[] args) {

SpringApplication.run(TkmapperDemoApplication.class, args);

}

}

Junit4 测试定义的方法

package com.bruce.mapper;

import com.bruce.TkmybatisApplication;

import com.bruce.entity.Orders;

import com.bruce.entity.Users;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringRunner;

import tk.mybatis.mapper.entity.Example;

import java.util.List;

import static org.junit.Assert.*;

@RunWith(SpringRunner.class)

@SpringBootTest(classes = TkmybatisApplication.class)

public class UserDaoTest {

@Autowired

private UsersDao usersDao;

@Autowired

private OrdersDao ordersDao;

@Test

public void testSelect() {

Example example = new Example(Users.class);

Example.Criteria criteria = example.createCriteria();

criteria.andEqualTo(“userName”, “bruce”);

List<Users> users = usersDao.selectByExample(example);

Users user1 = users.get(0);

System.out.println(user1);

Example example1 = new Example(Orders.class);

Example.Criteria criteria1 = example1.createCriteria();

criteria1.andEqualTo(“userId”, user1.getUserId());

List<Orders> ordersList = ordersDao.selectByExample(example1);

user1.setOrdersList(ordersList);

System.out.println(user1);

System.out.println(user1.getOrdersList());

}

@Test

public void testSelect2(){

Users bruce = usersDao.selectByUsername(“bruce”);

System.out.println(bruce);

}

}

逆向工程操作(用于生成代码)

maven引入

在dependencies中引入

<dependency>

<groupId>tk.mybatis</groupId>

<artifactId>mapper</artifactId>

<version>4.1.5</version>

</dependency>

在build标签下面的plugins标签下加入

<plugin>

<groupId>org.mybatis.generator</groupId>

<artifactId>mybatis-generator-maven-plugin</artifactId>

<version>1.3.5</version>

<configuration>

<!– 这里指定配置文件 –>

<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>

</configuration>

<dependencies>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.47</version>

</dependency>

<dependency>

<groupId>tk.mybatis</groupId>

<artifactId>mapper</artifactId>

<version>4.1.5</version>

</dependency>

</dependencies>

</plugin>

把配置文件放到resources下的generator目录下(这里目录可以随意,但要跟上面pow.xml文件中的 configurationFile 中指定目录一致)

内置文件内容如下

<?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>

<!– 引入数据库连接配置 –>

<!– <properties resource=”jdbc.properties”/>–>

<context id=”Mysql” targetRuntime=”MyBatis3Simple” defaultModelType=”flat”>

<property name=”beginningDelimiter” value=”`”/>

<property name=”endingDelimiter” value=”`”/>

<!– 配置 GeneralDAO –>

<plugin type=”tk.mybatis.mapper.generator.MapperPlugin”>

<property name=”mappers” value=”com.bruce.general.GeneralDao”/>

</plugin>

<!– 配置数据库连接 –>

<jdbcConnection driverClass=”com.mysql.jdbc.Driver”

connectionURL=”jdbc:mysql://localhost:3306/fmmall”

userId=”root” password=”root”>

</jdbcConnection>

<!– 配置实体类存放路径 –>

<javaModelGenerator targetPackage=”com.bruce.entity” targetProject=”src/main/java”/>

<!– 配置 XML 存放路径 –>

<sqlMapGenerator targetPackage=”/” targetProject=”src/main/resources/mappers”/>

<!– 配置 DAO 存放路径 –>

<javaClientGenerator targetPackage=”com.bruce.mapper” targetProject=”src/main/java” type=”XMLMAPPER”/>

<!– 配置需要指定生成的数据库和表,% 代表所有表 –>

<table tableName=”%”>

<!– mysql 配置 –>

<!– <generatedKey column=”id” sqlStatement=”Mysql” identity=”true”/>–>

</table>

<!– <table tableName=”tb_roles”>–>

<!– &lt;!&ndash; mysql 配置 &ndash;&gt;–>

<!– <generatedKey column=”roleid” sqlStatement=”Mysql” identity=”true”/>–>

<!– </table>–>

<!– <table tableName=”tb_permissions”>–>

<!– &lt;!&ndash; mysql 配置 &ndash;&gt;–>

<!– <generatedKey column=”perid” sqlStatement=”Mysql” identity=”true”/>–>

<!– </table>–>

</context>

</generatorConfiguration>

执行生成

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/184928.html原文链接:https://javaforall.cn

原文地址:https://cloud.tencent.com/developer/article/2155937

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340