一、使用代码的方式实现增删改查
1.1 MyBatis实现新增
-
在mybatis中默认是关闭了JDBC的自动提交功能
- 每一个 SqlSession 默认都是不自动提交事务。
- session.commit() 提交事务
- openSession(true);自动提交。setAutoCommit(true);
-
mybatis底层是对 JDBC 的封装。
- JDBC 中 executeUpdate() 执行新增,删除,修改的 SQL 返回值 int,表示受影响的行数。
- mybatis 中 标签没有 resultType 属性,认为返回值都是 int
-
在 openSession() 时 MyBatis 会创建一SqlSession时同时创建一个 Transaction (事务对象),同时 autoCommit 都为 false
- 如果出现异常,应该session.rollback()回滚事务。
-
java代码
InputStream is = Resources.getResourceAsStream("mybatis.xml"); // 使用工厂模式 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); // 生产session SqlSession session = factory.openSession(); // 添加 User user = new User(); user.setName("赵六"); user.setAge(23); int index = session.insert("com.yzq.mapper.UserMapper.insertUser", user); if (index > 0) { System.out.println("添加成功"); }else { System.out.println("添加失败"); } // 事务提交 session.commit(); session.close();
-
mapper.xml代码
<insert id="insertUser" parameterType="User" > insert into user values(default,#{name},#{age}) </insert>
1.2 MyBatis实现修改
-
java代码
InputStream is = Resources.getResourceAsStream("mybatis.xml"); // 使用工厂模式 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); // 生产session SqlSession session = factory.openSession(); // 修改 User user = new User(); user.setId(4); user.setName("tom"); int index = session.insert("com.yzq.mapper.UserMapper.updateUser", user); if (index > 0) { System.out.println("修改成功"); }else { System.out.println("修改失败"); } // 事务提交 session.commit(); session.close();
-
mapper.xml中代码
<update id="updateUser" parameterType="User"> update user set name = #{name} where id=#{id} </update>
1.3 MyBatis实现删除
-
java代码
InputStream is = Resources.getResourceAsStream("mybatis.xml"); // 使用工厂模式 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); // 生产session SqlSession session = factory.openSession(); // 删除 User user = new User(); user.setId(4); int index = session.insert("com.yzq.mapper.UserMapper.deleteUser", user); if (index > 0) { System.out.println("删除成功"); }else { System.out.println("删除失败"); } // 事务提交 session.commit(); session.close();
-
mapper.xml中代码
<delete id="deleteUser" parameterType="int"> delete from user where id = #{0} </delete>
1.4 MyBatis实现查询
-
mapper.xml中代码
<select id="selectUser" resultType="User"> select * from user </select>
-
java代码实现
InputStream is = Resources.getResourceAsStream("mybatis.xml"); // 使用工厂模式 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); // 生产session SqlSession session = factory.openSession(); // 查询 List<User> list = session.selectList("com.yzq.mapper.UserMapper.selectUser"); for (User user : list) { System.out.println(user); } session.close();
1.5 三种查询方式
-
selectList() 返回值为 List<resultType 属性控制>
-
适用于查询结果都需要遍历的需求
List<Flower> list = session.selectList("a.b.selAll"); for (Flower flower : list) { System.out.println(flower.toString()); }
-
-
.selectOne() 返回值 Object
-
适用于返回结果只是变量或一行数据时
int count = session.selectOne("a.b.selById"); System.out.println(count);
-
-
.selectMap() 返回值 Map
-
适用于需要在查询结果中通过某列的值取到这行数据的需求
-
Map<key,resultType 控制>
Map<Object, Object> map = session.selectMap("a.b.c", "name123"); System.out.println(map);
-
二、使用注解的形式实现增删改查
2.1关于MyBatis的注解
-
注解:为了简化配置文件
-
MyBatis的注解简化mapper.xml文件
- 如果涉及动态SQL依然使用mapper.xml
-
mapper.xml和注解可以共存。
-
使用注解时mybatis.xml中使用
<package/>
<mapper class=""/>
2.2 实现查询
@Select("select * from teacher")
List<Teacher> selectAll();
2.3 实现新增
@Insert("insert into teacher value(default,#{name})")
int insertTeacher(Teacher teacher);
2.4 实现修改
@Update("update teacher set name=#{name} where id=#{id}")
int updateTeacher(Teacher teacher);
2.5 实现删除
@Delete("delete from teacher where id=#{0}")
int deleteTeacher(int id);