MyBatis3
博文目录
在上一篇博客中我们已经实现了对简单数据库的查询,在本篇博客中,我们继续深入探讨MyBatis操作数据库的更深层的东西(木有高深的东西,一练就会)!
问题:
User user=(User) session.selectOne("com.cn.mapper.UserMapper.findById", 2);
我们的selectOne方法可以接收一个或两个参数,第一个参数是我们的查询方法,第二个参数使我们给方法传入的参数,并且MyBatis只支持传入一个参数!
如果我们要通过用户名和用户密码来查一个用户(假设他俩可以唯一确定一个值),该怎么实现呢??
MyBatis要求,如果你要传入多个选择条件,请封装成一个对象给我传进来!
这是很不方便的,并且每次查询我都要写那么长的完全限定名也是不爽的,我们使用下面的一种新的方式进行查询操作!
在mapper包中建立与我们配置的UserMapper.xml名称相同的一个接口:UserMapper.java,并且里面提供一个与我们配置的相同的方法:findById(int id);
package com.cn.mapper; import com.cn.pojo.User; //UserMapper接口名=配置的UserMapper.xml的名 public interface UserMapper { //方法对应UserMapper.xml中的select中的ID=findById,参数对应配置中的parameterType类型,返回值也对应 public User findById(int id); }
实现另一种方式的查询:
package com.cn.test; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.cn.mapper.UserMapper; import com.cn.pojo.User; public class MyBatis { public static void main(String[] args) throws Exception { Reader reader=Resources.getResourceAsReader("mybatis.xml"); SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader); SqlSession session=factory.openSession(); //MyBatis自动帮你生成接口的实现类 UserMapper userMapper=session.getMapper(UserMapper.class); //使用接口实现类对象调用方法获取查询结果 User user=userMapper.findById(1); System.out.println(user.getUsername()); /*User user=(User) session.selectOne("com.cn.mapper.UserMapper.findById", 2); System.out.println(user.getUsername());*/ session.close(); } }
下面我们使用这种方式进行其他数据库操作:
添加操作
在UserMapper.xml中添加一条语句:
<insert id="save" parameterType="User"> insert into t_user(username,password) values(#{username},#{password}) </insert>
在UserMapper.java中添加一个方法:
public void save(User user);
测试类的main方法:
package com.cn.test; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.cn.mapper.UserMapper; import com.cn.pojo.User; public class MyBatis { public static void main(String[] args) throws Exception { Reader reader=Resources.getResourceAsReader("mybatis.xml"); SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader); SqlSession session=factory.openSession(); User user=new User(); user.setUsername("mybatis"); user.setPassword("000000"); UserMapper userMapper=session.getMapper(UserMapper.class); userMapper.save(user); //insert update delete操作都需要事务的支持,事务必须提交后才有效 //事务提交有两种方式:1,下面这种,2,在上面的factory.openSession()参数列表中写个true:openSession(true);表示自动提交事务 session.commit(); session.close(); } }
下面的是完整的CURD配置
<?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="com.cn.mapper.UserMapper"> <select id="findById" parameterType="int" resultType="User"> select id,username,password from t_user where id = #{id} </select> <insert id="save" parameterType="User"> insert into t_user(username,password) values(#{username},#{password}) </insert> <update id="edit" parameterType="User"> update t_user set username=#{username},password=#{password} where id=#{id} </update> <delete id="del" parameterType="int"> delete from t_user where id=#{id} </delete> <select id="findByUsernamePassword" parameterType="User" resultType="User"> select id,username,password from t_user where username=#{username} and password=#{password} </select> </mapper>
package com.cn.mapper; import com.cn.pojo.User; public interface UserMapper { public User findById(int id); public void save(User user); public void edit(User user); public void del(int id); public User findByUsernamePassword(User user); }
用这种方法可以解决上面提到的问题:多条件查询。使用原始的也是可以的,他俩基本没啥区别!
这篇博文先写到这里,下一篇继续介绍查询:连接查询!