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);
}
用这种方法可以解决上面提到的问题:多条件查询。使用原始的也是可以的,他俩基本没啥区别!
这篇博文先写到这里,下一篇继续介绍查询:连接查询!