MyBatis 的常用注解
注解可以减少 Mapper 文件的编写,常用注解如下;
@Insert
:实现新增
@Update
:实现更新
@Delete
:实现删除
@Select
:实现查询
@Result
:实现结果集封装
@Results
:可以和@Result 一起使用,封装多个结果集
@One
:实现一对一结果集封装
@Many
:实现多对多结果集封装
MyBatis 的增删改查
数据库配置依旧保存不变
jdbc.properties
1 2 3 4 5 6
|
jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false jdbc.username=terwer jdbc.password=123456
|
sqlMapConfig.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="jdbc.properties"/>
<settings> <setting name="logImpl" value="STDOUT_LOGGING" /> </settings>
<typeAliases>
<package name="com.terwergreen.pojo"/> </typeAliases>
<environments default="development"> <environment id="development"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> <environment id="production"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments>
<mappers>
<package name="com.terwergreen.mapper"/> </mappers> </configuration>
|
User
1 2 3 4 5 6 7 8 9 10 11
| class User { var id: Int? = null var username: String? = null
override fun toString(): String { return "User{" + "id=" + id + ", username='" + username + '\'' '}' } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public class User { private Integer id; private String username;
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
@Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' '}'; } }
|
UserMapper
1 2 3 4 5 6 7 8 9 10 11 12 13
| interface UserMapper { @Select("select * from user") fun findAll(): List<User?>?
@Insert("insert into user(username) values(#{username})") fun add(user: User?)
@Update("update user set username=#{username} where id=#{id}") fun update(user: User?)
@Delete("delete from user where id=#{id}") fun delete(id: Int?) }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
public interface UserMapper { @Select("select * from user") List<User> findAll();
@Insert("insert into user(username) values(#{username})") void add(User user);
@Update("update user set username=#{username} where id=#{id}") void update(User user);
@Delete("delete from user where id=#{id}") void delete(Integer id); }
|
结果测试
UserMapper
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| class UserMapperTest { private var userMapper: UserMapper? = null private var sqlSession: SqlSession? = null @Before @Throws(Exception::class) fun before() { println("before...") val resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml") val sqlSessionFactory = SqlSessionFactoryBuilder().build(resourceAsStream) sqlSession = sqlSessionFactory.openSession() userMapper = sqlSession?.getMapper(UserMapper::class.java) }
@Test fun testFindAll() { val all = userMapper!!.findAll() for (user in all) { println(user) } }
@Test @Throws(IOException::class) fun add() { val user = User() user.username = "测试3" userMapper!!.add(user)
sqlSession!!.commit(true) }
@Test fun update() { val user = User() user.id = 3 user.username = "测试11" userMapper!!.update(user)
sqlSession!!.commit(true) }
@Test fun delete() { userMapper!!.delete(3)
sqlSession!!.commit(true) } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| public class UserMapperTest {
private UserMapper userMapper; private SqlSession sqlSession;
@Before public void before() throws Exception { System.out.println("before..."); InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); sqlSession = sqlSessionFactory.openSession(); userMapper = sqlSession.getMapper(UserMapper.class); }
@Test public void testFindAll() { List<User> all = userMapper.findAll(); for (User user : all) { System.out.println(user); } }
@Test public void add() throws IOException { User user = new User(); user.setUsername("测试3"); userMapper.add(user);
sqlSession.commit(true); }
@Test public void update() { User user = new User(); user.setId(3); user.setUsername("测试11"); userMapper.update(user);
sqlSession.commit(true); }
@Test public void delete() { userMapper.delete(3);
sqlSession.commit(true); } }
|
注意:默认不会自动提交事务,可以手动设置SqlSession,也可以在创建SqlSession的时候指定自动提交事务。
1 2 3
|
sqlSession = sqlSessionFactory.openSession(true);
|
本文代码地址
mybatis-annotation
文章更新历史
2022-08-30 feat:初稿