Mybatis总结2使用动态代理 实现接口


    config.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<environments default="development">
	   <environment id="development">
	       <transactionManager type="JDBC"/>
	        <!-- 配置数据连接信息 -->
	        <dataSource type="POOLED">
	         <property name="driver" value="com.mysql.jdbc.Driver"/>
	         <property name="url" value="jdbc:mysql://localhost:3306/mybaties"/>
	         <property name="username" value="root"/>
	         <property name="password" value="root"/>
	        </dataSource>
	       
	   </environment>
	</environments>
	
	<!-- 注册userMapper.xml配置文件 -->
	<mappers>
	<!-- 注册配置文件 -->
	    <mapper resource="taotao/mapper/userMapper.xml"/>
	    <mapper class="taotao.main.UserMaperI"/>
	  	</mappers>
	  	
</configuration>

使用注解的动态代理,注解的接口类类就是UserMaperI

UserMaperI接口使用了注解定义了sql语句

package taotao.main;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

public interface UserMaperI {
	
	//使用@insert注解指明add方法执行sql
	@Insert("insert into users (name,age) values(#{name},#{age})")
	public int add(Users users);
	
	
	//使用@delete注解指明deleteById方法执行sql
	@Delete("delete from users where id=#{id}")
	public int deleteById(int id);
	
	//通过@update注解指明updateById方法执行sql
	@Update("update users set name = #{name} ,age=#{age} where id=#{id}")
	public int updateById(Users users);
	
	//通过@select注解指明selectUserById方法执行sql
	@Select("select * from users where id = #{id}")
	public Users selectUserById(int id);
	
	//通过@select注解指明SelectUserAll方法执行sql
	@Select("select * from users")
	public List<Users> selectUsersAll();

}

使用工具类生成SqlSession,通过getMapper(接口类.class)生成动态的实现类


package taotao.utils;

import java.io.InputStream;

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

public class MybatiesUtil {
    
    //通过SqlSessionFafctory,创建SqlSession,并且使用的openSession为true.不用自动提交事务sqlSession.commit()
    public  static SqlSession getSqlSession(boolean flat){
        //获取配置文件
        String config = "config.xml" ;
         //获取类加载器,使用类加载器获取mybaties中的数据文件
        InputStream resourceAsStream = MybatiesUtil.class.getClassLoader().getResourceAsStream(config);

        //    创建能执行映射文件中的sql的sqlsession
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
        return build.openSession(flat);
    }
    
    //通过SqlSessionFactory,创建SqlSession,并且使用的OpenSession为默认值
     public static SqlSession getSqlSession(){
        //获取配置文件
        String config = "config.xml";
        //获取取类加载器
        ClassLoader classLoader = MybatiesUtil.class.getClassLoader();
        //通过类加载器。加载配置文件中的数据sql文件
        InputStream resourceAsStream = classLoader.getResourceAsStream(config);
        //获取SqlSessionFactory的工厂
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获取SqlSessionFactory
        SqlSession openSession = build.openSession();
        return openSession;
    }

}

openSession(true)与openSession()区别是:前者是自动提交事物,后者是需要手动提交事物

在实现接口动态代理的增删改需要使用自动的提交事物,才会有数据的改变

package taotao.main;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import taotao.utils.MybatiesUtil;

public class AnnotationMain {
	
	public static void main(String[] args) {
		AnnotationMain annotationMain = new AnnotationMain();
		//annotationMain.getAdd();//添加数据,只有自动提交事物才会成功
		//annotationMain.getUpdate();//修改数据,只有自动提交事物才会成功
		//annotationMain.getDeleteById();//删除数据,只用自动提交事物才会成功.不用先查询
		// annotationMain.getSelectById(7);	//查询不用提交事物
		//annotationMain.getSelectAll();//不需要自动提交事物
	}
	//添加数据
	public void getAdd(){
		
		//获取SqlSession,
		//动态获取对象的实现接对象需要获取。提交事物
		SqlSession sqlSession = MybatiesUtil.getSqlSession(true);
		//得到UserMapper接口的实现对象,UserMaperI对象是由SqlSession.getMapper(UserMaperI.class)动态获取
		UserMaperI mapper = sqlSession.getMapper(UserMaperI.class);
		Users users = new Users();
		users.setAge(1232);
		users.setName("还需努力");
		int add = mapper.add(users);
		sqlSession.close();//使用sqlSession关闭可以关闭,结果没有影响
		System.out.println("添加数据:"+add);
	}
	
	//修改数据
	public void getUpdate(){
		
		//获取SqlSession
		SqlSession sqlSession = MybatiesUtil.getSqlSession(true);
		sqlSession.commit();//手动提交事物
		//得到UserMapper接口的实现对象,UserMapperI对象是由SqlSession.getMapper(UserMaperI.class)动态获取
		UserMaperI mapper = sqlSession.getMapper(UserMaperI.class);
	
		Users users = new Users();
		users.setAge(98);
		users.setName("努力才会有结果");
		users.setId(3);
		int updateById = mapper.updateById(users);
	    //sqlSession执行完sql关闭
		sqlSession.close();
		
		System.out.println("修改参数:"+updateById);
		
		
	}
	
	//通过id删除数据
	public void getDeleteById(){
		
		//获取sqlSession
		SqlSession sqlSession = MybatiesUtil.getSqlSession(true);
		
		//通过sqlSession接口实现对象,UserMapperI对象是由SqlSession.getMapper(UserMaper。class)动态实现接口
		UserMaperI mapper = sqlSession.getMapper(UserMaperI.class);
		Integer intter=3;
		int deleteById = mapper.deleteById(3);
		
		System.out.println("删除数据:"+deleteById);
	}
	
	//通过Id查询数据
	public Users getSelectById(int number){
		
		//获取sqlSession
		SqlSession sqlSession = MybatiesUtil.getSqlSession();
		
		//通过sqlSession接口实现对象,UserMapperI对象是由SqlSession.getMapper(UserMaper.class)动态实现
	     UserMaperI mapper = sqlSession.getMapper(UserMaperI.class);
	     
		Users selectUserById = mapper.selectUserById(number);
		System.out.println(selectUserById.toString());
		
		return selectUserById;
	}
     public void getSelectAll(){
    	 //获取sqlSession
    	 SqlSession sqlSession = MybatiesUtil.getSqlSession();
    	 //通过sqlSession接口实现对象,UserMaperI对象是由SqlSession.getMapper(UserMapper.class)动态实现
    	 UserMaperI mapper = sqlSession.getMapper(UserMaperI.class);
    	  List<Users> selectUsersAll = mapper.selectUsersAll();
    	  System.out.println(selectUsersAll.size());
    	  
    	 
     }
}


 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值