mybatis增删改操作
1 增(插入操作)
(1)插入语句使用insert标签
(2)在映射文件中使用parameterType属性指定要插入的数据类型
(3)SQL语句中使用#{实体属性名}方式引用实体中的属性值
(4)插入操作使用的API是sqlSession.insert("命名空间.id", 实体对象)
(5)插入操作涉及数据库数据变化,所以要使用sqlSession对象显式地提交事务,即sqlSession.commit(),而查询操作不需要提交事务。mybaitis中默认事务是不提交的,而jdbc默认提交。
完整的代码:
mysql修改字段类型
alter table user modify column password varchar(40) not null;
原来设置password是int类型,后面根据需要进行了修改
USE test; create table `user` ( `id` int not null , `username` varchar(40) not null , `password` int not null, primary key (`id`) ) ENGINE = INNODB DEFAULT charset = utf8; insert into user(id, username, password) VALUES (1,'zhangsan',123); insert into user(id, username, password) VALUES (2,'lisi',123); insert into user(id, username, password) VALUES (3,'wangwu',123); insert into user(id, username, password) VALUES (4,'zhaoliu',123); insert into user(id, username, password) VALUES (5,'tianqi',123); alter table user modify id int auto_increment; insert into user (id, username, password) values (null, 'yanjiu', 456); alter table user modify column password varchar(40) not null;
userMapper.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="userMapper"> <!-- 插入操作--> <insert id="save" parameterType="com.company.domain.User"> insert into user values (#{id}, #{username}, #{password}); </insert> <!-- 查询操作--> <select id="findAll" resultType="com.company.domain.User"> select * from user </select> </mapper>
MyBatisTest.java
package com.company.test; import com.company.domain.User; 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.Test; import java.io.IOException; import java.io.InputStream; import java.util.List; public class MyBatisTest { @Test public void test2() throws IOException { // 模拟user对象 User user = new User(); user.setUsername("tom"); user.setPassword("abc"); // 获得核心配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); // 获得session工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); // 获得session会话对象 SqlSession sqlSession = sqlSessionFactory.openSession(); // 执行插入操作 sqlSession.insert("userMapper.save", user); // mybatis执行更新操作 ,默认是不提交的,需要手动提交事务 sqlSession.commit(); // 释放资源 sqlSession.close(); } @Test public void test1() throws IOException { // 获得核心配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); // 获得session工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); // 获得session会话对象 SqlSession sqlSession = sqlSessionFactory.openSession(); // 执行操作,参数:namespace+id List<User> userList = sqlSession.selectList("userMapper.findAll"); // 打印数据 System.out.println(userList); // 释放资源 sqlSession.close(); } }
其他的配置,可以看这篇:https://www.cnblogs.com/GumpYan/p/14248550.html
2 修改操作
(1)修改语句使用update标签
(2)修改操作使用的API是sqlSession.update("命名空间.id",实体对象)
// 插入操作 @Test public void test3() throws IOException { // 模拟user对象 User user = new User(); user.setId(8); user.setUsername("lucy"); user.setPassword("789"); // 获得核心配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); // 获得session工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); // 获得session会话对象 SqlSession sqlSession = sqlSessionFactory.openSession(); // 执行插入操作 sqlSession.update("userMapper.update", user); // mybatis执行更新操作 ,默认是不提交的,需要手动提交事务 sqlSession.commit(); // 释放资源 sqlSession.close(); }
3 删除操作
(1)删除语句使用delete标签
(2)SQL语句中使用#{任意字符串}方式引用传递的单个参数
(3)删除操作使用的API是sqlSession.delete("命名空间.id", Object)
传递单个参数,任意写,但是传递多个参数,字符串必须和实体属性名对应
// 删除操作 @Test public void test4() throws IOException { // 获得核心配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); // 获得session工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); // 获得session会话对象 SqlSession sqlSession = sqlSessionFactory.openSession(); // 执行插入操作 sqlSession.delete("userMapper.delete", 8); // mybatis执行更新操作 ,默认是不提交的,需要手动提交事务 sqlSession.commit(); // 释放资源 sqlSession.close(); }
4 小结