目录
今天呢接着之前进行添加功能的练习。
一.简单添加
①直接上代码:
StudentMapper.xml
<!--添加-->
<insert id="add">
insert into student(name,id,age,address,major)
value (#{name},#{id},#{age},#{address},#{major});
</insert>
StudentMapper.java
//添加
void add(Student stu);
MyBatisTest2.java
package Study.test;
import Study.Mapper.StudentMapper;
import Study.test1.Student;
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.InputStream;
public class MyBatisTest2 {
@Test
public void test() throws Exception {
//参数
String name = "wb";
int id = 5;
int age = 20;
String address = "SiChuan";
String major = "RG";
Student stu1 =new Student();
stu1.setAge(age);
stu1.setAddress(address);
stu1.setMajor(major);
stu1.setId(id);
stu1.setName(name);
//1.获取SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2.获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//3.获取Mapper接口代理对象
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
//4.执行方法
//4.添加
System.out.println("before :");
System.out.println(studentMapper.selectAll());
studentMapper.add(stu1);
System.out.println("after :");
System.out.println(studentMapper.selectAll());
//5.释放资源
sqlSession.close();
}
}
②运行结果:
成功!
③But 只是你以为你成功了
数据库中并没有成功插入,因为此时事务的自动提交设置为false
④如何解决呢:
在MyBatisTest2.java中加入一段代码
//提交事务
sqlSession.commit();
再次运行
大功告成!
⑤补充
MyBatis事务:
openSession():默认开启事务进行增删改操作后需要使用sqlSession.commit();来手动提交事务。openSession(true):可以设置为自动提交事务(关闭事务)。
二.添加-主键返回
在数据添加成功后,需要获取插入数据库数据的主键的值(传参时没有传主键,主键自增长)
方法在insert标签中加两个属性:
useGeneratedKeys="true" keyProperty="id"
keyProperty对应的值为表的主键名称
①上代码
StudentMapper.xml
<insert id="add2" useGeneratedKeys="true" keyProperty="id">
insert into student(name,age,address,major)
value (#{name},#{age},#{address},#{major});
</insert>
StudentMapper.java
void add2(Student stu);
MyBatisTest2.java
package Study.test;
import Study.Mapper.StudentMapper;
import Study.test1.Student;
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.InputStream;
public class MyBatisTest2 {
@Test
public void test() throws Exception {
//参数
String name = "hqc";
int age = 20;
String address = "SiChuan";
String major = "RG";
Student stu2 =new Student();
stu2.setAge(age);
stu2.setAddress(address);
stu2.setMajor(major);
stu2.setName(name);
//1.获取SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2.获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//3.获取Mapper接口代理对象
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
//4.执行方法
//4.添加
System.out.println("before :");
System.out.println(studentMapper.selectAll());
studentMapper.add2(stu2);
Integer id = stu2.getId();
System.out.println("after :");
System.out.println(studentMapper.selectAll());
System.out.println();
System.out.println("return Key:");
System.out.println(id);
//提交事务
sqlSession.commit();
//5.释放资源
sqlSession.close();
}
}
②运行结果:
因我之前测试,id字段为自增长,id=6添加成功,导致现在直接跳过id=6。
今天时间不够充裕,所以到此为止,每天一篇坚持不断更!!!冲冲冲!!!
。