基于SqlSession的单表无参CRUD
<?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属性,作用:唯一的 表示一个 Mapper配置文件,保护文件中的标签ID不被污染。 注意:值不能重复 污染:值重复-->
<mapper namespace="com.sxt.pojo.User">
<!-- 配置SQL资源
查询:select标签 属性: id:唯一标识一个SQL语句参数
resultType:结果类型;声明使用哪个实体类存储查询的结果。一条结果一个实体类对象存储
parameterType:声明实参类型
增加:insert标签
修改:update标签
删除:delete标签
注意:同一文件内的标签ID不能重复
-->
<!-- 结果多条 -->
<select id="users" resultType="com.sxt.pojo.User">
SELECT * FROM mybatis
</select>
<!-- 结果1条 -->
<select id="user" resultType="com.sxt.pojo.User">
SELECT * FROM mybatis WHERE userid=1
</select>
<insert id="insu">
INSERT INTO mybatis VALUE(default,"李四",14)
</insert>
<update id="upu">
UPDATE mybatis SET username="王五" WHERE userid=11
</update>
<delete id="dele">
DELETE FROM mybatis WHERE userid="4"
</delete>
</mapper>
@Test
public void test() throws IOException {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("mybatis.xml");
//2.获取SqlSessionFactory工厂(底层完成了配置文件的解析)
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3.获取SqlSession对象
SqlSession session = factory.openSession();
//4.使用SqlSession对象完成对数据库的操作
//查询一条
User one = session.selectOne("com.sxt.pojo.User.user");
System.out.println("查询结果为一条"+one);
//查询多条
List<User> list = session.selectList("com.sxt.pojo.User.users");
for(User u:list){
System.out.println("查询结果为多条"+u);
}
//增加
int i = session.insert("com.sxt.pojo.User.insu");
System.out.println("增加了"+i+"条数据");
//修改
int up = session.update("com.sxt.pojo.User.upu");
System.out.println("修改了"+up+"条数据");
//删除
int dele = session.delete("com.sxt.pojo.User.dele");
System.out.println("删除了"+dele+"条数据");
//5.关闭资源 DML操作没有自动提交 需要自个儿手动提交
session.commit();
session.close();
}
基于SqlSession的单表带参CRUD
单参数(查询)
- 在查询标签上使用parameterType属性 声明参数类型
作用:因为SqlSession提供的数据库操作方法声明的实参类型为Object,要通过该属性将数据强转为对应的类型 - 在SQL语句中使用#{0}进行占位
- 使用SqlSession的方法完成查询
selectListString str,Object arg1);
selectOne(String str,Object arg1);
String str:接收要执行的SQL语句的全限定路径
Object arg0:接收实参
多参数(CRUD)
- 在查询标签上使用paramterType属性声明参数类型
- 在SQL语句中使用#{属性名|键名}进行参数占位
注意:因为SqlSession对象提供的数据库操作方法只接收一个实参,所以,如果SQL语句中需要多个参数,必须将参数封装成一个对象,将该对象传递给方法完成数据库操作 - 使用SqlSession的方法完成操作
注意:
SqlSession对象提供的数据库操作方法直接受实参
<!-- 一个数据 -->
<select id="userss" resultType="User" parameterType="int">
SELECT * FROM mybatis WHERE userid=#{param1}
</select>
<!-- 多个数据 -->
<select id="usersss" resultType="User" parameterType="List">
SELECT * FROM mybatis WHERE username=#{username} AND userid=#{userid}
</select>
<!-- 删除 -->
<delete id="delete" parameterType="int">
DELETE FROM mybatis WHERE userid=#{0}
</delete>
<!-- 增加 -->
<insert id="add" parameterType="com.sxt.pojo.User">
INSERT INTO mybatis(username,userage) VALUE(#{username},#{userage})
</insert>
<!-- 修改 -->
<update id="upda" parameterType="User">
UPDATE mybatis SET username=#{username},userage=#{userage} WHERE userid=#{userid}
</update>
public class UserTest {
private SqlSession session;
@Before //在所有使用@Test注解的方法执行前 执行
public void before() throws IOException{
//1.读取文件
InputStream in = Resources.getResourceAsStream("mybatis.xml");
//2.获取SqlSessionFactory工厂对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3.获取Session对象
session = factory.openSession();
}
@After //在所有使用@Test注解的方法执行后 执行
public void After(){
//关闭资源 手动提交
session.commit();
session.close();
}
//带参的CRUD
@Test
public void test1() throws IOException{
//使用Session对象完成对数据库的操作
//一个参数
User selectOne = session.selectOne("com.sxt.pojo.User.userss",1);
System.out.println("单个"+selectOne);
//多参数
User u = new User();
u.setUsername("张三");
u.setUserage(13);
List<User> users = session.selectList("com.sxt.pojo.User.usersss",u);
for(User us:users){
System.out.println("多个"+us);
}
}
//带参的增加
//DML操作没有自动提交
@Test
public void test2() throws IOException{
//使用SqlSession对象完成对数据库的操作
User user = new User();
user.setUsername("张三");
user.setUserage(13);
int count = session.insert("com.sxt.pojo.User.add", user);
System.out.println("增加的行数"+count);
}
//带参的删除
@Test
public void test3() throws IOException{
//使用SqlSession对象完成CRUD
int count = session.delete("com.sxt.pojo.User.delete", 13);
System.out.println("删除行数"+count);
}
//带参的修改
@Test
public void test4() throws IOException{
//使用SqlSession对象完成CRUD操作
User u = new User();
u.setUserid(15);
u.setUsername("李四");
u.setUserage(88);
int count = session.update("com.sxt.pojo.User.upda",u);
System.out.println("修改的行数"+count);
}
}