Mybatis


Mybatis

他是一个支持普通Sql查询,存储过程和高级映射的一个优秀的持久层框架,他是一个用来操作数据库的一个框架

环境搭建:

  1. 导入两个jar包 一个是mybatis的核心jar,一个是mysql的数据库连接驱动
  2. 书写主配置文件(mybatis.xml):在主配置文件中配置数据库的连接信息(数据库驱动、url、usenrame、password等)
  3. 书写局部配置文件(xxx.xml):局部配置文件的名字与dao层的类名保持一致,局部配置文件用来保存sql语句
  4. 将主配置文件(mybatis.xml)与局部配置文件(xxx.xml)关联起来
  5. 写一个实体类,实体类里面的属性及数据类型要与数据库中相同
  6. 写一个实现类跟局部配置文件在同一个包下

xml中的注释快捷键:

mybatis.xml 主配置环境

<?xml version="1.0" encoding="UTF-8"?>




    
	
		
		
	
	
    
	
        
		
		
			
			
			
				
				
				
				
			
		
	
    
		
	

局部配置

<?xml version="1.0" encoding="UTF-8"?>




    
    
		id,name,age,birth
	
	
	 
	 
    
    
    
    
	 
	 
	 
	 
    
     
	 
	 	insert into man set id=#{id},name=#{name},age=#{age},birth=#{birth};
	 
	 
	 	update man set name=#{name},age=#{age} where id = #{id};
	 
	 
	 	delete from man where id = #{0};
	 

实现类模板

		//1、需要执行sql语句(SqlSession---->SqlSessionFactory----->SqlSessionFactoryBuilder)
		SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
		//将mybatis.xml主配置文件变成字节输入流
		InputStream ins = Resources.getResourceAsStream( "mybatis.xml");
		SqlSessionFactory ssf = sfb.build(ins);
		SqlSession session= ssf.openSession();
		List lists = 					      	  	 	 	 	 		   session.selectList("com.mao.dao.impl.StudentDaoImpl.selectAll");
		for (Student student : lists) {
			System.out.println(student);
		}

可以将获得Session放到一个init()方法中,每次执行只需要调用一次init()

	private static SqlSession session = null;
	public void init(){
		//1、需要执行sql语句(SqlSession---->SqlSessionFactory----->SqlSessionFactoryBuilder)
		//将mybatis.xml主配置文件变成字节输入流
		try {
			SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
			InputStream ins = Resources.getResourceAsStream("mybatis.xml");
			SqlSessionFactory ssf = sfb.build(ins);
			session= ssf.openSession();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

实现类是如何使用查询的

//前面定义了一个公共的一个session
	public void selectAll(){
        //可以用对象来接收
		List lists = session.selectList("com.mao.dao.impl.ManDaoImpl.selectAll");
		for (Man man : lists) {
			System.out.println(man);
		}
	}
public void selectAll2(){
    	//也可以用Map接收
		List> lists = session.selectList("com.mao.dao.impl.ManDaoImpl.selectAll2");
		for (Map man : lists) {
			System.out.println(man);
		}
	}
	
	public void selectById(){
		Man man = session.selectOne("com.mao.dao.impl.ManDaoImpl.selectById",1);
		System.out.println(man);
	}
	
	public void selectByTj(){
		HashMap parameters = new HashMap();
		parameters.put("name", "毛毛");
		parameters.put("age", 20);
		List man = session.selectList("com.mao.dao.impl.ManDaoImpl.selectByTj",parameters);
		System.out.println(man);
	}
	
	public void selectByTj2(){
		Man man = new Man();
		man.setName("傻猫"); 
		man.setAge(2);
		List> map = session.selectList("com.mao.dao.impl.ManDaoImpl.selectByTj2",man);
		for (Map map2 : map) {
			System.out.println(map2);
		}
	}

	public void addMan(){
		HashMap parameters = new HashMap();
		parameters.put("id", 3);
		parameters.put("name", "傻狗");
		parameters.put("age", 5);
		parameters.put("birth", "2022-03-07 00:00:00");
		int s = session.insert("com.mao.dao.impl.ManDaoImpl.addMan", parameters);
		if(s>0){
			System.out.println("数据添加成功!");
			session.commit();
		}else{
			System.out.println("数据添加失败,请重新添加!");
		}
	}
	
	public void updateMan(){
		HashMap map = new HashMap();
		map.put("name", "傻猫");
		map.put("age", 2);
		map.put("id", 3);
		int s = session.update("com.mao.dao.impl.ManDaoImpl.updateMan", map);
		if(s>0){
			System.out.println("数据修改成功!");
			session.commit();
		}else{
			System.out.println("数据修改失败,请重新添加!");
		}
	}
	
	public void deleteMan(){
		int s = session.delete("com.mao.dao.impl.ManDaoImpl.deleteMan",1);
		if(s>0){
			System.out.println("数据删除成功!");
			session.commit();
		}else{
			System.out.println("数据删除失败,请重新删除!");
		}
	}
	//动态sql
	public void selectDynamic(){
		HashMap map = new HashMap();
		map.put("id", 1);
		map.put("name", "毛毛");
		List> mapList = session.selectList("com.mao.dao.impl.ManDaoImpl.selectDynamic",map);
		for (Map map2 : mapList) {
			System.out.println(map2);
		}
	}

增删改查 注意事项!!!需要注意

  1. 查询数据:在Mybatis.框架中,查询对应的sql语句需要书写在select标签中。

    1. 查询时必须指定返回的数据类型
    2. 如果是带条件的查询语句,则需通过select标签中的parameterType指定条件的类型
  2. 增删改:在Mybatis.框架中,添加对应的sql语句需要书写在insert、delete、update标签中

    1. 添加千万不要指定返回的数据类型(增、删、改这三个操作返回类型默认均为in类型,代表影响的行数)
    2. 添加和修改时的参数信息类型需要指定parameterType
    3. 在企业的实际开发中大多数情况是通过id(主键)来删除数据的
    4. 增删改数据时需要提交事务(删除、修改也需要提交事务,查询不需要) SqlSession.commit();
  3. 回滚就是SqlSession.rollback(); 使用完记得将其关闭,SqlSession.close();

其他标签:

别名标签(typeAliases):
typeAliases,标签是写实体类的别名,写了之后可以在写Sql配置文件时,例如