☰
Mybatis注解开发
2026/9/25 20:05:23 网站建设 项目流程

一、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 List<User> 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); }
driver=com.mysql.cj.jdbc.Driver username=root password=admin url=jdbc:mysql://localhost:3306/dbstudy?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
<?xml version="1.0" encoding="UTF-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 resource="jdbc.properties"> <!-- 也可以直接写property --> </properties> <!-- 2.全局设置 --> <settings> <setting name="logImpl" value="SLF4J"/> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <!-- 3.起别名,简化mapper中实体类全限定名 --> <typeAliases> <typeAlias type="com.ithiema.Dao.User" alias="user"></typeAlias> </typeAliases> <!-- 4.多环境配置,default指定使用哪个环境 --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- 5.注册Mapper映射文件(核心!) --> <mappers> <!-- 方式1:resource加载xml --> <!-- <mapper resource="com.ithiema.mapper/UserMapper.xml"/>--> <!-- 方式2:扫描整个包,接口名和xml同名同路径 --> <package name="com.ithiema.Mapper"/> </mappers> </configuration>
package 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(){ List<User> 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.uid=u.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 List<Order> 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 List<User> 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( id=true, property = "id", column = "id"),//id=true表明是主键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 List<User> findUserAndOrder(String username); }

OrderMapper加一句 以供调用

@Select("select * from orders where uid=#{uid}")
public List<Order> 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.uid=u.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 List<Order> findAll(); @Select("select * from orders where uid=#{uid}") public List<Order> 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 List<User> 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.roleId=r.id AND ur.userId=#{uid}") public List<Role> findByUid(); }

相对于一对多,一对一的查询,一对多查询多了一张中间表,即:将userid 与 roleid 对应的中间表。先将中间表和职能表进行链接得出内容再与user表进行链接。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询