前面已经讲到用接口的方式编程。这种方式,要注意的一个地方就是。在User.xml  的配置文件中,mapper namespace="com.yihaomen.mybatis.inter.IUserOperation" ,命名空间非常重要,不能有错,必须与我们定义的package 和 接口一致。如果不一致就会出错,这一章主要在上一讲基于接口编程的基础上完成如下事情:
1. 用 mybatis 查询数据,包括列表
2. 用 mybatis 增加数据
3. 用 mybatis 更新数据.
4. 用 mybatis 删除数据.

查询数据,前面已经讲过简单的,主要看查询出列表的
查询出列表,也就是返回list, 在我们这个例子中也就是 List<User> , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的

 程序代码

<!-- 为了返回list 类型而定义的returnMap -->
    <resultMap type="User" id="resultListUser">
        <id column="id" property="id" />
        <result column="userName" property="userName" />
        <result column="userAge" property="userAge" />
        <result column="userAddress" property="userAddress" />
    </resultMap>

查询列表的语句在 User.xml 中

 程序代码

<!-- 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 -->
    <select id="selectUsers" parameterType="string" resultMap="resultListUser">
        select * from user where userName like #{userName}
    </select>

在 IUserOperation 接口中增加方法:public List<User> selectUsers(String userName);    
现在在 Test 类中做测试

 程序代码

public void getUserList(String userName){
        SqlSession session = sqlSessionFactory.openSession();
        try {
            IUserOperation userOperation=session.getMapper(IUserOperation.class);           
            List<User> users = userOperation.selectUsers(userName);
            for(User user:users){
                System.out.println(user.getId()+":"+user.getUserName()+":"+user.getUserAddress());
            }
            
        } finally {
            session.close();
        }
    }

现在在main  方法中可以测试:

 程序代码

public static void main(String[] args) {
        Test testUser=new Test();
        testUser.getUserList("%");
    }

可以看到,结果成功查询出来。如果是查询单个数据的话,用第二讲用过的方法就可以了。

用mybatis 增加数据 
在 IUserOperation 接口中增加方法:public void addUser(User user);
在 User.xml 中配置

 程序代码

<!--执行增加操作的SQL语句。id和parameterType  
       分别与IUserOperation接口中的addUser方法的名字和  
       参数类型一致。以#{name}的形式引用Student参数  
       的name属性,MyBatis将使用反射读取Student参数  
       的此属性。#{name}中name大小写敏感。引用其他  
       的gender等属性与此一致。seGeneratedKeys设置  
       为"true"表明要MyBatis获取由数据库自动生成的主  
       键;keyProperty="id"指定把获取到的主键值注入  
       到Student的id属性--> 
    <insert id="addUser" parameterType="User" 
        useGeneratedKeys="true" keyProperty="id"> 
        insert into user(userName,userAge,userAddress)  
             values(#{userName},#{userAge},#{userAddress})  
    </insert>

然后在 Test 中写测试方法:

 程序代码

/**
     * 测试增加,增加后,必须提交事务,否则不会写入到数据库.
     */
    public void addUser(){
        User user=new User();
        user.setUserAddress("人民广场");
        user.setUserName("飞鸟");
        user.setUserAge(80);
        SqlSession session = sqlSessionFactory.openSession();
        try {
            IUserOperation userOperation=session.getMapper(IUserOperation.class);
            userOperation.addUser(user);
            session.commit();
            System.out.println("当前增加的用户 id为:"+user.getId());
        } finally {
            session.close();
        }
    }

用mybatis 更新数据
方法类似,先在 IUserOperation 中增加方法:public void addUser(User user);
然后配置 User.xml 

 程序代码

<update id="updateUser" parameterType="User" >
        update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id=#{id}
    </update>

Test 类总的测试方法如下:

 程序代码

public void updateUser(){
        //先得到用户,然后修改,提交。
        SqlSession session = sqlSessionFactory.openSession();
        try {
            IUserOperation userOperation=session.getMapper(IUserOperation.class);
            User user = userOperation.selectUserByID(4);            
            user.setUserAddress("原来是魔都的浦东创新园区");
            userOperation.updateUser(user);
            session.commit();
            
        } finally {
            session.close();
        }
    }

用mybatis 删除数据 
同理,IUserOperation 增加方法:public void deleteUser(int id);
配置User.xml

 程序代码

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

然后在Test类中写测试方法:

 程序代码


    /**
     * 删除数据,删除一定要 commit.
     * @param id
     */
    public void deleteUser(int id){
        SqlSession session = sqlSessionFactory.openSession();
        try {
            IUserOperation userOperation=session.getMapper(IUserOperation.class);           
            userOperation.deleteUser(id);
            session.commit();            
        } finally {
            session.close();
        }
    }

这样,所有增删改查都完成了,注意在增加,更改,删除的时候要调用session.commit(),这样才会真正对数据库进行操作,否则是没有提交的。

到此为止,简单的单表操作,应该都会了,接下来的时间了,我会讲多表联合查询,以及结果集的选取。

最新文章

  1. [R语言]foreach和doParallel包实现多个数据库同时查询
  2. 用canvas 绘制的饼状统计图、柱状统计图、折线统计图
  3. Android 5.0五大安全特性
  4. android 蓝牙连接与通讯(Bluetooth)
  5. cocoaPods的安装使用 以及 Carthage
  6. sql语句如何查询一个表中某两个字段的相同数据?
  7. LNMP搭建03 -- 编译安装PHP
  8. 05_NoSQL数据库之Redis数据库:Redis的常用命令,键值相关命令和服务器相关命令
  9. [LeetCode]&#160;Smallest Subtree with all the Deepest Nodes 包含最深结点的最小子树
  10. Vue 自定义一个插件的用法、小案例及在项目中的应用
  11. vue 渲染后更新数据
  12. [UGUI]游戏中的Tips贴图标边缘显示(贴边)
  13. web自动化--如何在不同页面间游刃有余
  14. 优化-最小化损失函数的三种主要方法:梯度下降(BGD)、随机梯度下降(SGD)、mini-batch SGD
  15. block(三)揭开神秘面纱(上)-b
  16. 2018No-java面试知识
  17. maven学习(2)-在Eclipse 中使用Maven
  18. RabbitMq install on Centos
  19. Jmeter中控制某一段脚本失败后重复执行,并在每个HTTP Request名字中加上循环次数
  20. POJ 1038 Bug Integrated Inc(状态压缩DP)

热门文章

  1. RABBITMQ(小总结 持续更新...
  2. html基础学习
  3. thoughtworks编程题
  4. 三种renderman规范引擎的dice对比
  5. 第二章 搭建Android开发环境--读书笔记
  6. ORA-20000 ORU-10027 buffer overflow limit of 2000 bytes
  7. 轮播效果(margin-left/top)移动
  8. PP生产订单创建、下达、报工、收货、投料
  9. javascript在html中的加载顺序
  10. Codeforces Round #381 (Div. 2) A B C 水 构造