Mybatis--接口式编程及增删改查

一. 以接口的方式编程


升级版,用于操作SQL语句,接口里的函数必须与SQL语句文件(userMapper.xml)里的id对应,参数也是,这样在调用SQL时就像在调用普通的类函数

1. 改写userMapper.xml的内容如下,将namespace改为接口的路径名,其他不变:

<mapper namespace="inter.IUserOperation">
  <select id="selectUser" resultType="javastudy.User">
     select * from user where id = #{id}
  </select>
</mapper>


2. 写个接口,其中的函数是上文中的id,要是有多个要执行的SQL语句,则该接口里也有多个相应的函数

public interface IUserOperation {

    public User selectUser(int id);
}


3. 测试类

public class Mytest {

    @Test
    public void testSelect() throws IOException {
        SqlSession session = MyBatisUtils.openSession();
        //String statement ="javastudy.UserMapper.selectUser";//userMapper.xml中的namespace.id
        //User user =(User)session.selectOne(statement,1);
        
        IUserOperation userOperation = session.getMapper(IUserOperation.class);
        User user = userOperation.selectUser(1);

        System.out.println(user);
        session.close();
    }
}


二. 实现数据的增删改查

1. 查询

resultType表示查询返回的结果类型,是类实例。resultMap 所对应的应该是我们自己配置的

resultType 从这条语句中返回的期望类型的类的完全限定名或别名。注意如果是集合情形,那应该是集合可以包含的类型,而不能是集合本身。使用 resultType 或 resultMap,但不能同时使用。
resultMap 外部 resultMap 的命名引用。结果集的映射是 MyBatis 最强大的特性,对其有一个很好的理解的话,许多复杂映射的情形都能迎刃而解。使用 resultMap 或 resultType,但不能同时使用。
修改userMapper.xml:

<resultMap type="javastudy.User" id="resultListUser">
    <id column="id" property="id"/>
    <result column="username" property="userName"/>
    <result column="userPwd" property="userPwd"/>
  </resultMap>

  <select id="selectUsers" resultMap="resultListUser">
     select * from user where username like '%'
  </select>

Id and Result Attributes
属性 描述
property 映射到列结果的字段或属性。如果匹配的是存在的,和给定名称相同 的 JavaBeans 的属性,那么就会使用。否则 MyBatis 将会寻找给定名称 property 的字段。这两种情形你可以使用通常点式的复杂属性导航。比如,你 可以这样映射一些东西: “username” ,或者映射到一些复杂的东西: “address.street.number” 。
column 从数据库中得到的列名,或者是列名的重命名标签。这也是通常和会 传递给 resultSet.getString(columnName)方法参数中相同的字符串。

property对应的是class中的属性,column对应的是SQL语句执行select之后返回的列名或者是列别名。


修改接口IUserOperation,增加方法:public List<User> selectUsers();

测试代码中,使用新方法即可:

        IUserOperation userOperation = session.getMapper(IUserOperation.class);
        List<User> users = userOperation.selectUsers();
        for(User user: users)
            System.out.println(user);

2. 增加数据

修改userMapper.xml:

<insert id="addUser" parameterType="javastudy.User" useGeneratedKeys="true"
  keyProperty="id">
    insert into user(userName,userPwd) values(#{userName},#{userPwd})
  </insert>


注意: 数据库中table在创建的时候,id必须设置为auto_increment,这样增加数据的时候才能成功


Insert, Update ; Delete
属性 描述
id 命名空间中的唯一标识符,可被用来代表这条语句。
parameterType 将要传入语句的参数的完全限定类名或别名。这个属性是可选的,因为 MyBatis 可以通过 TypeHandler 推断出具体传入语句的参数,默认值为 unset。
parameterMap 这是引用外部 parameterMap 的已经被废弃的方法。使用内联参数映射和 parameterType 属性。
flushCache 将其设置为 true,任何时候只要语句被调用,都会导致本地缓存和二级缓存都会被清空,默认值:true(对应插入、更新和删除语句)。
timeout 这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。默认值为 unset(依赖驱动)。
statementType STATEMENT,PREPARED 或 CALLABLE 的一个。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED。
useGeneratedKeys (仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段),默认值:false。
keyProperty (仅对 insert 和 update 有用)唯一标记一个属性,MyBatis 会通过 getGeneratedKeys 的返回值或者通过 insert 语句的 selectKey 子元素设置它的键值,默认:unset。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
keyColumn (仅对 insert 和 update 有用)通过生成的键值设置表中的列名,这个设置仅在某些数据库(像 PostgreSQL)是必须的,当主键列不是表中的第一列的时候需要设置。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
databaseId 如果配置了 databaseIdProvider,MyBatis 会加载所有的不带 databaseId 或匹配当前 databaseId 的语句;如果带或者不带的语句都有,则不带的会被忽略。

修改接口IUserOperation,增加方法:public void addUsers(User user);

测试:

public void addUser()throws IOException {
        User user = new User();
        user.setUserName("test2");
        user.setUserPwd("123");
        
        SqlSession session = MyBatisUtils.openSession();
        try{
            System.out.println(user);
            IUserOperation userOperation = session.getMapper(IUserOperation.class);
            userOperation.addUser(user);
            session.commit();   //必须提交事务,否则不会写入到数据库.
            System.out.println("当前增加的用户id:"+user.getId());
        }finally{
            session.close();
        }
    }

3. 更新数据

修改接口IUserOperation,增加方法:public void updateUsers(User user);

在配置文件中增加SQL语句:

  <update id="updateUsers" parameterType="javastudy.User">
      update user set userName=#{userName}, userPwd=#{userPwd} where id=#{id}
  </update>

测试:

try{
            IUserOperation userOperation = session.getMapper(IUserOperation.class);
            User user = userOperation.selectUserByID(6);
            user.setUserPwd("456");
            userOperation.updateUsers(user);
            session.commit();      //注意要commit 

4. 删除数据

同理,IUserOperation 增加方法:public void deleteUser(int id);

SQL语句:

  <delete id="deleteUser" parameterType="int">
      delete from user where id=#{id}
  </delete>

测试:

public void deleteUser()throws IOException {        
        SqlSession session = MyBatisUtils.openSession();
        try{
            IUserOperation userOperation = session.getMapper(IUserOperation.class);
            userOperation.deleteUser(7);
            session.commit();
        }finally{
            session.close();
        }
    }



所有增删改查都完成了,注意在增加,更改,删除的时候要调用session.commit()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值