MyBatis 注解配置
Employee

package com.example.demo.domain; import java.io.Serializable; public class Employee implements Serializable { private Integer id; private String loginname; private String password; private String name; private String sex; private Integer age; private String phone; private double sal; private String state; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getLoginname() { return loginname; } public void setLoginname(String loginname) { this.loginname = loginname; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public double getSal() { return sal; } public void setSal(double sal) { this.sal = sal; } public String getState() { return state; } public void setState(String state) { this.state = state; } }
EmployeeMapper

package com.example.demo.mapper; import com.example.demo.domain.Employee; import org.apache.ibatis.annotations.DeleteProvider; import org.apache.ibatis.annotations.InsertProvider; import org.apache.ibatis.annotations.SelectProvider; import org.apache.ibatis.annotations.UpdateProvider; import java.util.HashMap; import java.util.List; import java.util.Map; public interface EmployeeMapper { List<Employee> selectEmployeeByIdLike(HashMap<String,Object> params); List<Employee> selectEmployeeByLoginLike(HashMap<String,Object> params); List<Employee> selectEmployeeChoose(HashMap<String,Object> params); List<Employee> selectEmployeeLike(HashMap<String,Object> params); Employee selectEmployeeById(Integer id); void updateEmployeeIfNecessary(Employee employee); List<Employee> selectEmployeeIn(List<Integer> ids); List<Employee> selectEmployeeLikeNmae(Employee employee); @SelectProvider(type = EmployeeSqlProvider.class,method = "selectWithParam") List<Employee> selectWithParam(Map<String,Object> param); @InsertProvider(type = EmployeeSqlProvider.class,method = "insert") int insert(Employee employee); @UpdateProvider(type = EmployeeSqlProvider.class,method = "update") void update(Employee employee); @DeleteProvider(type = EmployeeSqlProvider.class,method = "delete") void delete(Map<String,Object> param); }
EmployeeSqlProvider

package com.example.demo.mapper; import com.example.demo.domain.Employee; import org.apache.ibatis.jdbc.SQL; import java.util.Map; public class EmployeeSqlProvider { public String selectWithParam(Map<String,Object> param){ return new SQL(){ { SELECT("*"); FROM("tb_employee"); if(param.get("id")!=null){ WHERE(" id=#{id} "); } if(param.get("loginname")!=null){ WHERE(" loginname=#{loginname} "); } if(param.get("password")!=null){ WHERE(" password=#{password} "); } if(param.get("name")!=null){ WHERE(" name=#{name} "); } if(param.get("sex")!=null){ WHERE(" sex=#{sex} "); } if(param.get("age")!=null){ WHERE(" age=#{age} "); } if(param.get("phone")!=null){ WHERE(" phone=#{phone} "); } if(param.get("sal")!=null){ WHERE(" sal=#{sal} "); } if(param.get("state")!=null){ WHERE(" state=#{state} "); } } }.toString(); } public String insert(Employee employee){ return new SQL(){ { INSERT_INTO("tb_employee"); if(employee.getLoginname()!=null){ VALUES("loginname","#{loginname}"); } if(employee.getPassword()!=null){ VALUES("password","#{password}"); } if(employee.getName()!=null){ VALUES("name","#{name}"); } if(employee.getSex()!=null){ VALUES("sex","#{sex}"); } if(employee.getAge()!=null){ VALUES("age","#{age}"); } if(employee.getPhone()!=null){ VALUES("phone","#{phone}"); } if(employee.getSal()>=0){ VALUES("sal","#{sal}"); } if(employee.getState()!=null){ VALUES("state","#{state}"); } } }.toString(); } public String update(Employee employee){ return new SQL(){ { UPDATE("tb_employee"); if(employee.getLoginname()!=null){ SET("loginname=#{loginname}"); }if(employee.getPassword()!=null){ SET("password=#{password}"); }if(employee.getName()!=null){ SET("name=#{name}"); }if(employee.getSex()!=null){ SET("sex=#{sex}"); }if(employee.getAge()!=null){ SET("age=#{age}"); }if(employee.getPhone()!=null){ SET("phone=#{phone}"); }if(employee.getSal()>=0){ SET("sal=#{sal}"); }if(employee.getState()!=null){ SET("state=#{state}"); } WHERE(" id=#{id} "); } }.toString(); } public String delete(Map<String,Object> param){ return new SQL(){ { DELETE_FROM("tb_employee"); if(param.get("id")!=null){ WHERE(" id=#{id} "); }if(param.get("loginname")!=null){ WHERE(" loginname=#{loginname} "); }if(param.get("password")!=null){ WHERE(" password=#{password} "); }if(param.get("name")!=null){ WHERE(" name=#{name} "); }if(param.get("sex")!=null){ WHERE(" sex=#{sex} "); }if(param.get("age")!=null){ WHERE(" age=#{age} "); }if(param.get("phone")!=null){ WHERE(" phone=#{phone} "); }if(param.get("sal")!=null){ WHERE(" sal=#{sal} "); }if(param.get("state")!=null){ WHERE(" state=#{state} "); } } }.toString(); } }
AnnotationTest

package com.example.demo.test; import com.example.demo.domain.Clazz; import com.example.demo.domain.Employee; import com.example.demo.domain.Person; import com.example.demo.domain.User; import com.example.demo.factory.FKSqlSessionFactory; import com.example.demo.mapper.ClazzMapper; import com.example.demo.mapper.EmployeeMapper; import com.example.demo.mapper.PersonMapper; import com.example.demo.mapper.UserMapper; import org.apache.ibatis.session.SqlSession; import java.util.HashMap; import java.util.List; import java.util.Map; public class AnnotationTest { public static void main(String[] args){ SqlSession session= FKSqlSessionFactory.getSqlSession(); // UserMapper mapper=session.getMapper(UserMapper.class); AnnotationTest test=new AnnotationTest(); // test.testInsert(session,mapper); // test.testSelectById(session,mapper); // test.testUpdateUser(session,mapper); // test.testDeleteUser(session,mapper); // test.testSelectAll(session,mapper); // PersonMapper mapper=session.getMapper(PersonMapper.class); // test.testOneToOne(session,mapper); // ClazzMapper mapper=session.getMapper(ClazzMapper.class); // test.testOneToMany(session,mapper); EmployeeMapper mapper=session.getMapper(EmployeeMapper.class); // test.testDynamicSQL(session,mapper); test.testDynamicInsert(session,mapper); // test.testDynamicUpdate(session,mapper); // test.testDynamicDelete(session,mapper); session.close(); } public void testInsert(SqlSession session,UserMapper mapper){ User user=new User(); user.setName("leon"); user.setSex("男"); user.setAge(30); mapper.saveUser(user); session.commit(); } public void testSelectById(SqlSession session,UserMapper mapper){ User user=mapper.selectById(5); System.out.println(user.getName()+" "+user.getSex()+" "+user.getAge()); } public void testUpdateUser(SqlSession session,UserMapper mapper){ User user=mapper.selectById(5); System.out.println(user.getName()+" "+user.getSex()+" "+user.getAge()); user.setName("kate"); user.setSex("女"); user.setAge(28); mapper.modifyUser(user); session.commit(); } public void testDeleteUser(SqlSession session,UserMapper mapper){ mapper.removeUser(5); session.commit(); } public void testSelectAll(SqlSession session,UserMapper mapper){ List<User> users=mapper.selectAll(); users.forEach(user -> System.out.println(user.getName()+" "+user.getSex()+" "+user.getAge())); } public void testOneToOne(SqlSession session, PersonMapper mapper){ Person person=mapper.selectById(1); System.out.println(person.getName()+" "+person.getSex()+" "+person.getAge()); System.out.println(person.getCard().getCode()); } public void testOneToMany(SqlSession session, ClazzMapper mapper){ Clazz clazz=mapper.selectById(1); System.out.println(clazz.getCode()+" "+clazz.getName()); clazz.getStudents().forEach(student -> System.out.println(student.getName()+" "+student.getSex()+" "+student.getAge())); } public void testDynamicSQL(SqlSession session, EmployeeMapper mapper){ Map<String,Object> map=new HashMap<String,Object>(); map.put("state","ACTIVE"); map.put("loginname","jack"); map.put("password","123456"); List<Employee> list=mapper.selectWithParam(map); list.forEach(employee -> System.out.println(employee.getName()+" "+employee.getSex()+" "+employee.getAge()+" "+employee.getSal()+" "+employee.getState())); } public void testDynamicInsert(SqlSession session,EmployeeMapper mapper){ Employee employee=new Employee(); employee.setName("tom"); employee.setSex("男"); employee.setAge(19); employee.setLoginname("tom"); employee.setPassword("123456"); employee.setSal(10000); employee.setPhone("13700010001"); employee.setState("ACTIVE"); mapper.insert(employee); session.commit(); } public void testDynamicUpdate(SqlSession session,EmployeeMapper mapper){ Employee employee=mapper.selectEmployeeById(3); employee.setName("汤姆"); employee.setSal(20000); mapper.update(employee); session.commit(); } public void testDynamicDelete(SqlSession session,EmployeeMapper mapper){ Map<String,Object> map=new HashMap<String,Object>(); map.put("loginname","tom"); map.put("password","123456"); mapper.delete(map); session.commit(); } }
UserMapper

package com.example.demo.mapper; import com.example.demo.domain.User; import org.apache.ibatis.annotations.*; import java.util.List; public interface UserMapper { @Insert("insert into tb_user(name,sex,age) values(#{name},#{sex},#{age})") @Options(useGeneratedKeys = true,keyProperty = "id") int saveUser(User user); @Delete("delete from tb_user where id=#{id}") int removeUser(@Param("id")Integer id); @Update("update tb_user set name=#{name},sex=#{sex},age=#{age} where id=#{id}") void modifyUser(User user); @Select("select * from tb_user where id=#{id}") @Results({ @Result(id=true,column = "id",property = "id"), @Result(column = "name",property = "name"), @Result(column = "sex",property = "sex"), @Result(column = "age",property = "age") }) User selectById(Integer id); @Select("select * from tb_user") List<User> selectAll(); User selectUserById(Integer id); List<User> selectAllUser(); void deleteUserById(Integer id); }
ClazzMapper

package com.example.demo.mapper; import com.example.demo.domain.Clazz; import org.apache.ibatis.annotations.Many; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.mapping.FetchType; public interface ClazzMapper { Clazz selectClazzById(Integer id); @Select("select * from tb_clazz where id=#{id}") @Results({ @Result(id=true,column = "id",property = "id"), @Result(column = "name",property = "name"), @Result(column = "code",property = "code"), @Result(column = "id",property = "students", many = @Many(select = "com.example.demo.mapper.StudentMapper.selectByClazzId",fetchType = FetchType.LAZY)) }) Clazz selectById(Integer id); }
StudentMapper

package com.example.demo.mapper; import com.example.demo.domain.Student; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import java.util.List; public interface StudentMapper { Student selectStudentByClazzId(Integer id); Student selectStudentById(Integer id); @Select("select * from tb_student where clazz_id=#{id}") @Results({ @Result(id=true,column = "id",property = "id"), @Result(column = "name",property = "name"), @Result(column = "sex",property = "sex"), @Result(column = "age",property = "age"), }) List<Student> selectByClazzId(Integer id); }
PersonMapper

package com.example.demo.mapper; import com.example.demo.domain.Person; 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 org.apache.ibatis.mapping.FetchType; public interface PersonMapper { Person selectPersonById(Integer id); @Select("select * from tb_person where id=#{id}") @Results({ @Result(id=true,column = "id",property = "id"), @Result(column = "name",property = "name"), @Result(column = "sex",property = "sex"), @Result(column = "age",property = "age"), @Result(column = "card_id",property = "card", one = @One(select = "com.example.demo.mapper.CardMapper.selectById",fetchType = FetchType.EAGER)) }) Person selectById(Integer id); }
CardMapper

package com.example.demo.mapper; import com.example.demo.domain.Card; import org.apache.ibatis.annotations.Select; public interface CardMapper { Card selectCardById(Integer id); @Select("select * from tb_card where id=#{id}") Card selectById(Integer id); }
Card

package com.example.demo.domain; import java.io.Serializable; public class Card implements Serializable { private Integer id; private String code; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } }
Person

package com.example.demo.domain; import java.io.Serializable; public class Person implements Serializable { private Integer id; private String name; private String sex; private Integer age; private Card card; public Card getCard() { return card; } public void setCard(Card card) { this.card = card; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
Clazz

package com.example.demo.domain; import java.io.Serializable; import java.util.List; public class Clazz implements Serializable { private Integer id; private String code; private String name; private List<Student> students; public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Student

package com.example.demo.domain; import java.io.Serializable; public class Student implements Serializable { private Integer id; private String name; private String sex; private Integer age; private Clazz clazz; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Clazz getClazz() { return clazz; } public void setClazz(Clazz clazz) { this.clazz = clazz; } }
User

package com.example.demo.domain; import java.io.Serializable; public class User implements Serializable { private Integer id; private String name; private String sex; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
FKSqlSessionFactory

package com.example.demo.factory; 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 java.io.IOException; import java.io.InputStream; public class FKSqlSessionFactory { private static SqlSessionFactory sqlSessionFactory=null; static { try { InputStream inputStream= Resources.getResourceAsStream("mybatis-config.xml"); sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!