Mybatis入门学习(二.代理类的使用)

接口创建

我们一般实际开发中,Dao层都有接口类,然后实现接口类以创建后续的操作,那么我们框架技术一样,可以通过接口实现

UserDao

import java.util.List;

import domain.User;
import domain.UserVO;

public interface UserDao {
	public User findById(int id);
	public void add(User user);
	public void DeleteById(int id);
	public void updateUser(User user);
	public List<User> findAll();
	public List<String> findUsername();
	public UserVO findUserIdandGarde();
	
}

User1Mapper.xml

<?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="dao.UserDao">		
	
	<!-- id就是这个查询语句的标识符,以便于区分其余方法
	
			查询结果直接封装为我们resultType指定的对象
	 -->
	 
	 <resultMap type="domain.User" id="UserMap">
	 	<result property="username" column="name"/>
	 </resultMap>
	 
	<select id="findById" parameterType="int" resultType="domain.User">
		select * from tb_user where id=#{id}	<!-- 对于基本类型,可以任意写,不影响结果 -->
	</select>
	
	<!-- ognl表达式后面输入的是类中的属性名 -->
	<insert id="add" parameterType="domain.User">
		insert into tb_user(id,password,username) values (#{id},#{password},#{username})
	</insert>
	
	<delete id="DeleteById" parameterType="int">
		delete from tb_user where id=#{id}
	</delete>
	
	<update id="updateUser" parameterType="domain.User">
		update tb_user set username=#{username},password=#{password} where id=#{id} 
	</update>
	
	<select id="findAll" resultMap="UserMap">
		select username name,password,id from tb_user
	</select>
	
	<select id="findUsername" resultType="String">
		select username  from tb_user
	</select>
	
	<select id="findUserIdandGarde" resultType="domain.UserVO">
		select id,garde  from tb_user u,tb_garde g where u.username=g.username
	</select>
</mapper>
  • 这里我们需要注意以下几点
  • namespace:必须和接口的类对应,也就是必须是类所在层次
  • 方法的ID名,必须是我们接口中的方法名,否则后期无法使用
  • 然后其中涉及的VO类,后面讲解

text02

import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import dao.UserDao;
import domain.User;
import domain.UserVO;

public class Text02 {
	public static void main(String[] args) {
		
		String resource="MybatisMainCof.xml";
		
		InputStream is=Text01.class.getClassLoader().getResourceAsStream(resource);
		SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(is);	//通过配置文件获取链接工厂
		
		SqlSession sqlSession=sessionFactory.openSession();		//获取链接
		
		
		/*
		 * 通过getMapper得到代理类
		 */
		
		/*UserDao userDao=sqlSession.getMapper(UserDao.class);
		User user=userDao.findById(2);
		System.out.println(user);*/
		
		/*UserDao userDao=sqlSession.getMapper(UserDao.class);
		User user=new User("100","zhangsan","123");	
		userDao.add(user);;*/
	
		/*UserDao userDao=sqlSession.getMapper(UserDao.class);
		User user=new User("100","zhangsan","123456");
		userDao.updateUser(user);*/
		
		/*UserDao userDao=sqlSession.getMapper(UserDao.class);
		userDao.DeleteById(100);*/
		
		/*UserDao userDao=sqlSession.getMapper(UserDao.class);
		List<User> result=userDao.findAll();
		System.out.println(result);*/
		
		/*UserDao userDao=sqlSession.getMapper(UserDao.class);
		List<String> result=userDao.findUsername();
		System.out.println(result);
		*/
		
		UserDao userDao=sqlSession.getMapper(UserDao.class);
		UserVO userVO=userDao.findUserIdandGarde();
		System.out.println(userVO);
		
		
		sqlSession.commit();
		sqlSession.close();
		
	}
}
  • 这里的前期操作和前面介绍一样,都是先获取到链接
  • 然后这里我们需要注意了,UserDao因为是一个接口,所以我们需要实体类在接受,然而这个类怎么获取呢?这就是这里的关键
  • 我们通过getMapper(接口类.class)来获取
  • 然后剩下的操作就很简单了,就直接对象名.方法名

连表查询

userVO
public class UserVO {
	private int id;
	private int garde;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getGarde() {
		return garde;
	}
	public void setGarde(int garde) {
		this.garde = garde;
	}
	public UserVO(int id, int garde) {
		super();
		this.id = id;
		this.garde = garde;
	}
	public UserVO() {
		super();
	}
	@Override
	public String toString() {
		return "UserVO [id=" + id + ", garde=" + garde + "]";
	}
	
}
  • 这里的VO类,就是跨越了两个表的属性进行查询的
  • 方法定义里面,的sql语句都很简单,就是最简单的定义,这里就只需要主要定义

总结

  • 本篇主要介绍的是通过接口创建框架
  • 后续会继续介绍讲属性提出到配置文件
  • 以及sql中的一对多、多对多的关系
  • 这里我们还需要注意一些细节:
  • 1.我们获取参数值,有两个办法,EL表达式 Ognl表达式
  • 2.我们只有通过EL表达式获取的才是预处理,而Ognl获取的参数是直接拼接,这里实际应用需要注意
  • 3.如果是基本参数类型,我们获取的时候不一样要对应属性名,可以随意写,只是为了不出错,最好还是用属性名
  • 4.如果是对象的参数,那就必须是对应对象中的 参数了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值