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>
創(chuàng)建實(shí)體類(字段類型一定要是對(duì)象類型坑匠,不能是基礎(chǔ)類型:要寫Integer不能寫int椿疗,要寫Long不能寫long)
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;
}
創(chuàng)建DAO接口
tkMapper已經(jīng)完成了對(duì)單表的通用操作的封裝腻扇,封裝在Mapper接口和MySqlMapper接口膜楷;因此如果我們要完成對(duì)單表的操作,只需自定義DAO接口繼承Mapper接口和MySqlMapper接口
@Repository
public interface UserDAO extends Mapper<User>, MySqlMapper<Users> {
????? public Users selectByUsername(String username);?? //tkMapper中默認(rèn)的方法不能滿足當(dāng)前要求可以自定義方法
}
UserMapper.xml
如果tkMybatis默認(rèn)的方法不能滿足當(dāng)下的要求可以杉编,將自定義的方法寫入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根據(jù)自己需要?jiǎng)?chuàng)建的的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>
修改啟動(dòng)類的`@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 測(cè)試定義的方法
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標(biāo)簽下面的plugins標(biāo)簽下加入
<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 中指定目錄一致)
內(nèi)置文件內(nèi)容如下
<?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>
? ? <!-- 引入數(shù)據(jù)庫(kù)連接配置 -->
<!--? ? <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>
? ? ? ? <!-- 配置數(shù)據(jù)庫(kù)連接 -->
? ? ? ? <jdbcConnection driverClass="com.mysql.jdbc.Driver"
? ? ? ? ? ? ? ? connectionURL="jdbc:mysql://localhost:3306/fmmall"
? ? ? ? ? ? ? ? userId="root" password="root">
? ? ? ? </jdbcConnection>
? ? ? ? <!-- 配置實(shí)體類存放路徑 -->
? ? ? ? <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"/>
? ? ? ? <!-- 配置需要指定生成的數(shù)據(jù)庫(kù)和表,% 代表所有表 -->
? ? ? ? <table tableName="%">
? ? ? ? ? ? <!-- mysql 配置 -->
<!--? ? ? ? ? ? <generatedKey column="id" sqlStatement="Mysql" identity="true"/>-->
? ? ? ? </table>
<!--? ? ? ? <table tableName="tb_roles">-->
<!--? ? ? ? ? ? <!– mysql 配置 –>-->
<!--? ? ? ? ? ? <generatedKey column="roleid" sqlStatement="Mysql" identity="true"/>-->
<!--? ? ? ? </table>-->
<!--? ? ? ? <table tableName="tb_permissions">-->
<!--? ? ? ? ? ? <!– mysql 配置 –>-->
<!--? ? ? ? ? ? <generatedKey column="perid" sqlStatement="Mysql" identity="true"/>-->
<!--? ? ? ? </table>-->
? ? </context>
</generatorConfiguration>