Mybatis注解开发
一、Mybatis的常用注解package com.ithiema.Dao; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; Data AllArgsConstructor NoArgsConstructor Builder public class User { private int id; private String username; private String password; private String perms; }package com.ithiema.Mapper; import com.ithiema.Dao.User; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import java.util.List; public interface UserMapper { Insert(INSERT INTO user(username,password,perms) VALUES(#{username},#{password},#{perms})) public void save(User user); Select(SELECT * FROM user) public ListUser findAll(); Select(SELECT id,username,password,perms FROM user WHERE id #{id}) public User findById(int id); Delete(DELETE FROM user WHERE id#{id}) public void delete(int id); Update(UPDATE user SET username#{username},password#{password},perms#{perms} WHERE id#{id}) public void update(User user); }drivercom.mysql.cj.jdbc.Driver usernameroot passwordadmin urljdbc:mysql://localhost:3306/dbstudy?useSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrue?xml version1.0 encodingUTF-8? !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN http://mybatis.org/dtd/mybatis-3-config.dtd configuration !-- 顺序不能乱properties - settings - typeAliases - typeHandlers - environments - mappers -- !-- 1.加载外部properties数据库配置文件 -- properties resourcejdbc.properties !-- 也可以直接写property -- /properties !-- 2.全局设置 -- settings setting namelogImpl valueSLF4J/ setting namemapUnderscoreToCamelCase valuetrue/ /settings !-- 3.起别名简化mapper中实体类全限定名 -- typeAliases typeAlias typecom.ithiema.Dao.User aliasuser/typeAlias /typeAliases !-- 4.多环境配置default指定使用哪个环境 -- environments defaultdevelopment environment iddevelopment transactionManager typeJDBC/ dataSource typePOOLED property namedriver value${driver}/ property nameurl value${url}/ property nameusername value${username}/ property namepassword value${password}/ /dataSource /environment /environments !-- 5.注册Mapper映射文件核心 -- mappers !-- 方式1resource加载xml -- !-- mapper resourcecom.ithiema.mapper/UserMapper.xml/-- !-- 方式2扫描整个包接口名和xml同名同路径 -- package namecom.ithiema.Mapper/ /mappers /configurationpackage com.ithiema; import com.ithiema.Dao.User; import com.ithiema.Mapper.UserMapper; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.List; public class test { private UserMapper mapper; Before public void before() throws IOException { InputStream resourceAsStream Resources.getResourceAsStream(sqlMapConfig.xml); SqlSessionFactory build new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession sqlSession build.openSession(true); mapper sqlSession.getMapper(UserMapper.class); } Test public void testSave(){ User user new User(); user.setUsername(tom); user.setPerms(user:add); mapper.save(user); } Test public void testUpdate(){ User user new User(); user.setId(7); user.setUsername(zavier); user.setPassword(123456); user.setPerms(user:update); mapper.update(user); } Test public void testDelete(){ User user new User(); mapper.delete(6); } Test public void testFindById(){ User user mapper.findById(2); System.out.println(user user); } Test public void testFindAll(){ ListUser all mapper.findAll(); for(User u:all){ System.out.println(u); } } }二、注解实现复杂映射开发一对一查询的两种方式package com.ithiema.Mapper; import com.ithiema.Dao.Order; import com.ithiema.Dao.User; import org.apache.ibatis.annotations.One; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import java.util.List; public interface OrderMapper { Select(select *,o.id oid from orders o,user u where o.uidu.id) // Results({ // Result(column oid, property id), // Result(column total, property total), // Result(column uid, property user.id), // Result(column username, property user.username), // Result(column password, property user.password), // }) Results({ Result(column oid, property id), Result(column total, property total), Result( property user,//要封装的属性的名称 column uid,//根据哪个字段去查询user表的数据 javaType User.class,//要封装的实体类型 //select属性代表 查询 的哪个接口的方法获得数据 one One(select com.ithiema.Mapper.UserMapper.findById) ) }) public ListOrder findAll(); }一对多查询package com.ithiema.Mapper; import com.ithiema.Dao.User; import org.apache.ibatis.annotations.*; import java.util.List; public interface UserMapper { Insert(INSERT INTO user(username,password,perms) VALUES(#{username},#{password},#{perms})) public void save(User user); Select(SELECT * FROM user) public ListUser findAll(); Select(SELECT id,username,password,perms FROM user WHERE id #{id}) public User findById(int id); Delete(DELETE FROM user WHERE id#{id}) public void delete(int id); Update(UPDATE user SET username#{username},password#{password},perms#{perms} WHERE id#{id}) public void update(User user); Select(select * from user) Results({ Result( idtrue, property id, column id),//idtrue表明是主键id Result(column username,property username), Result(column password, property password), Result( property orderList, column id, javaType List.class, many Many(select com.ithiema.Mapper.OrderMapper.findByUid) ) }) public ListUser findUserAndOrder(String username); }OrderMapper加一句 以供调用Select(select * from orders where uid#{uid})public ListOrder findByUid(int uid);package com.ithiema.Mapper; import com.ithiema.Dao.Order; import com.ithiema.Dao.User; import org.apache.ibatis.annotations.One; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import java.util.List; public interface OrderMapper { Select(select *,o.id oid from orders o,user u where o.uidu.id) // Results({ // Result(column oid, property id), // Result(column total, property total), // Result(column uid, property user.id), // Result(column username, property user.username), // Result(column password, property user.password), // }) Results({ Result(column oid, property id), Result(column total, property total), Result( property user,//要封装的属性的名称 column uid,//根据哪个字段去查询user表的数据 javaType User.class,//要封装的实体类型 //select属性代表 查询 的哪个接口的方法获得数据 one One(select com.ithiema.Mapper.UserMapper.findById) ) }) public ListOrder findAll(); Select(select * from orders where uid#{uid}) public ListOrder findByUid(int uid); }一对多多对多查询的数据库表请看这条链接Mybatis的多表操作问题-CSDN博客Select(select * from user) Results({ Result(id true,column id,property id), Result(column username,property username), Result(column password,property password), Result( property roleList, column id, javaType List.class, many Many(select com.ithiema.Mapper.RoleMapper.findByUid) ) }) public ListUser findUserAndRoleAll();还需引用package com.ithiema.Mapper; import org.apache.ibatis.annotations.Select; public interface RoleMapper { Select(select * from sys_user_role ur,sys_role r where ur.roleIdr.id AND ur.userId#{uid}) public ListRole findByUid(); }相对于一对多一对一的查询一对多查询多了一张中间表即将userid 与 roleid 对应的中间表。先将中间表和职能表进行链接得出内容再与user表进行链接。