MyBatis3_轻松入门_2
博文目录
?
在上一篇博客中我们已经实现了对简单数据库的查询,在本篇博客中,我们继续深入探讨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);}
?
用这种方法可以解决上面提到的问题:多条件查询。使用原始的也是可以的,他俩基本没啥区别!
这篇博文先写到这里,下一篇继续介绍查询:连接查询!
?
?
?