`

MyBatis3_轻松入门_2

阅读更多

MyBatis3

博文目录

  1.  使用Mapper接口形式操作数据库
  2. 对数据库的CURD操作的配置

 

在上一篇博客中我们已经实现了对简单数据库的查询,在本篇博客中,我们继续深入探讨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);
}

 

用这种方法可以解决上面提到的问题:多条件查询。使用原始的也是可以的,他俩基本没啥区别!

这篇博文先写到这里,下一篇继续介绍查询:连接查询

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics