typeAliases 别名:主要作用就是为了简化书写提高效率。
配置方法:我们要简化的一般都是mybatis.xml中入参的参数类型(parameterType),以及返回的参数类型(resultType)
假设我们没有简化前,都是写全路径:
这种写法特别麻烦,且效率低下。
进行别名配置:
一般推荐方案二
别名配置好了,我们在对应的*mapper.xml文件中使用就特别简单了:
功能:从应用程序角度出发,软件具有哪些功能.
业务:完成功能时的逻辑.对应 Service 中一个方法
事务:从数据库角度出发,完成业务时需要执行的 SQL 集合,统称一个事务.
事务回滚.如果在一个事务中某个 SQL 执行事务,希望回归到事务的原点,保证数据库数据的完整性.
在 mybatis 中默认是关闭了 JDBC 的自动提交功能:
1.每一个 SqlSession 默认都是不自动提交事务.
不自动提交的原因:首先我们在mybatis.xml<transactionManager/> type中配置有两种方案,JDBC 或者 MANAGED
1.当type使用jdbc时,TransactionFactory默认实现类为JdbcTransaction,里面实质是对java.sql.connection的简单封装,而jdbc的原生事务是设置自动提交的,但是mybatis框架做了处理,在SqlSessionFactory.openSession时把autoCommit默认设置成了false,所以不自动提交。
2.当type使用MANAGED时,TransactionFactory默认实现类为ManagedTransaction,它默认的commit和rollback方法都是空的,它让容器管理事务transaction的整个生命周期。也就是说,ManagedTransaction不会帮我们commit和rollback。
2. session.commit()提交事务.
3.openSession(true);自动提交.setAutoCommit(true);
MyBatis的新增 删除 修改 及事务:
mybatis 底层是对 JDBC 的封装. JDBC 中 executeUpdate()执行新增,删除,修改的 SQL.返回值 int,表示受影响的行数.
mybatis 中<insert> <delete> <update>标签没有 resultType 属性,认为返回值都是 int
mapper.xml
<insert id="insertPeople" parameterType="People"> insert into people values(default,#{name},#{age}) </insert> <update id="updatePeople" parameterType="People"> update people set name=#{name} where id=#{id} </update> <delete id="deletePeople" parameterType="int"> delete from people where id=#{0} </delete>
Test:
/** * MyBatis新增操作 */ @Test public void testInsert() throws Exception { People p = new People(); p.setName("钱八"); p.setAge(25); int index = session.insert("com.tao.mapper.PeopleMapper.insertPeople", p); if(index>0){ System.out.println("新增成功"); }else{ System.out.println("新增失败"); } session.commit(); } @Test public void testUpdate() throws Exception { People p = new People(); p.setId(6); p.setName("钱八"); int index = session.update("com.tao.mapper.PeopleMapper.updatePeople", p); if(index>0){ System.out.println("修改成功"); }else{ System.out.println("修改失败"); } session.commit(); } @Test public void testDelete() throws Exception { int index = session.delete("com.tao.mapper.PeopleMapper.deletePeople",6); if(index>0){ System.out.println("删除成功"); }else{ System.out.println("删除失败"); } session.commit(); }
Mybatis事务处理:
/** * MyBatis事务处理 * @throws Exception */ @Test public void testTransaction() throws Exception { People p = new People(); p.setName("李九"); p.setAge(26); int index = session.insert("com.tao.mapper.PeopleMapper.insertPeople", p); if(index>0){ System.out.println("新增成功"); }else{ System.out.println("新增失败"); } p.setName("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); //在抛错时进行事务回滚 try { int index1 = session.insert("com.tao.mapper.PeopleMapper.insertPeople", p); if(index1>0){ System.out.println("新增成功"); }else{ System.out.println("新增失败"); } } catch (Exception e) { // TODO Auto-generated catch block //e.printStackTrace(); session.rollback(); } session.commit(); }