后端开发基础-MyBatis框架学习-001——基础概念

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Coder_Boy_/article/details/82933835

MyBatis简介(ORM框架)

iBatis—>MyBatis
-作用:对数据库进行操作
JDBC—>JdbcTemplate—>MyBatis
MyBatis是对JDBC技术的封装.
-封装了获取连接,生成Statement,执行SQL过程
-封装了SQL参数设置过程
(将参数设置到#{xx})
-封装了将结果集映射成实体对象过程
(resultType指定,名称对应)
MyBatis使用需要的准备工作:
-导入mybatis包+数据库驱动包
-添加一个SqlMapConfig.xml主配置文件
-根据表写实体类/编写SQL/
利用MyBatis调用SQL

MyBatis基本使用

User—>UserMapper.xml
Emp—>EmpMapper.xml

save
update
delete
findById
findAll

select * from user_czh
where name like ?

Mapper映射器(接口)

MyBatis提供了一个Mapper映射器接口规则,
按规则写出的接口,MyBatis框架可以自动生成
实现组件对象。

UserDAO接口—》JdbcUserDAO实现类
—》生成对象使用
Mapper映射器接口—》生成对象使用

映射器接口接口规则:
-方法名参考SQL定义的id属性(保持一致)
-方法参数类型参考SQL定义的
parameterType属性(保持一致)
-方法返回类型
增删改:可以是void 或 int
查询:单行结果类型为resultType
多行结果类型为List
-将SQL定义文件元素的
namespace属性指定为”包名.接口名”

映射器接口的使用:
sqlSession.getMapper(接口.class);

UserDAO dao = new $Proxy4();
public class $Proxy4 implements UserDAO{
public List findAll(){
return session.selectList(“findAll”);
}

public User findById(int id){
return session.selectOne(
“findById”,id);
}
}

=====任务=====
利用MyBatis对资费表进行以下操作
-查询所有资费记录
-按ID查询资费记录
-添加资费记录
-删除资费记录
-更新资费记录
-编写CostDAO映射器接口实现上述操作

案例演示:

案例思路:

工程案例目录结构

 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.study</groupId>
  <artifactId>mybatis-day07</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  
   <dependencies>
  	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.3.0</version>
</dependency>

  	<dependency>
  		<groupId>com.oracle</groupId>
  		<artifactId>ojdbc14</artifactId>
  		<version>10.2.0.4.0</version>
  	</dependency>
  	<dependency>
  		<groupId>junit</groupId>
  		<artifactId>junit</artifactId>
  		<version>4.12</version>
  	</dependency>
  </dependencies>
</project>

SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" 
          "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
	<environments default="environment">
		<environment id="environment">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
					<property name="driver" value="oracle.jdbc.OracleDriver"/>
					<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
					<property name="username" value="learn"/>
					<property name="password" value="learn"/>
			</dataSource>
		</environment>
	</environments>
	
	<!-- 加载SQL定义文件 -->
	<mappers>
		<mapper resource="UserMapper.xml" />
	</mappers>
</configuration>

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.dk.dao.UserDAO">
	<!-- 返回Map结果 -->
	<select id="findName" parameterType="int" resultType="map">
		SELECT ID,NAME FROM user_dk
		WHERE ID=#{id}
	</select>
	
	<!-- 按name字段值模糊查询 -->
	<select id="findLikeName" parameterType="string" 
							resultType="com.dk.entity.User">
		SELECT * FROM user_dk
		WHERE NAME like #{name}
	
	</select>
	
	<!-- SqlSession.delete执行 -->
	<delete id="deleteUser" parameterType="int">
		DELETE FROM user_dk
		WHERE ID = #{id}
	
	</delete>
	
	<!-- SqlSession.update执行 -->
	<update id="updateUser" parameterType="com.dk.entity.User">
		UPDATE user_dk 
		SET NAME=#{name},AGE=#{age}
		WHERE ID=#{id}
	</update>
	
	<!-- SqlSession.insert执行 -->
	<insert id="saveUser" parameterType="com.dk.entity.User">
		INSERT INTO user_dk  (ID,NAME,AGE) 
		VALUES (#{id},#{name},#{age})
	
	</insert>
	
	<!-- SqlSession.selectList执行 -->
	<select id="findAll" resultType="com.dk.entity.User">
		SELECT * FROM user_dk
	
	</select>
	
	<!-- SqlSession.selectOne执行 -->
	<select id="findById" parameterType="int" resultType="com.dk.entity.User">
		SELECT * FROM user_dk
		WHERE id = #{id}
	</select>
</mapper>

User.java

package com.dk.entity;

import java.io.Serializable;

public class User implements Serializable{
	private Integer id;
	private String name;
	private Integer age;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}

}

MyBatisUtil.java

package com.dk.entity;

import java.io.IOException;
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;

public class MyBatisUtil {
	
	public static SqlSession getSession() throws IOException{
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
		String conf = "SqlMapConfig.xml";
		Reader reader = Resources.getResourceAsReader(conf);
		
		SqlSessionFactory factory = builder.build(reader);
		SqlSession session = factory.openSession();
		
		return session;
	}

	public static void main(String[] args) throws IOException {
		SqlSession session = MyBatisUtil.getSession();
		System.out.println(session);
	}
}

TestUser.java

package com.test;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import com.dk.dao.UserDAO;
import com.dk.entity.MyBatisUtil;
import com.dk.entity.User;

public class TestUser {
	
	@Test//测试Mapper映射器接口
	public void test8() throws IOException{
		SqlSession session = MyBatisUtil.getSession();
		//根据接口生成实现对象
		UserDAO dao = session.getMapper(UserDAO.class);
		System.out.println(dao.getClass().getName());
		
		//调用 id = findAll的SQL语句
		List<User> list = dao.findAll();
		for(User user:list){
			System.out.println(user.getId()+" "+user.getName());
		}
		session.close();
	}
	
	@Test//测试查询返回Map
	public void test7() throws IOException{
		SqlSession session = MyBatisUtil.getSession();
		Map<String,Object> map = session.selectOne("findName", 1);
		if(map != null){//利用字段名做key提取值
			System.out.println(map.get("ID")+" "+map.get("NAME"));
		}else{
			System.out.println("未找到数据");
		}
		
		session.close();
		
	}
	
	@Test//测试模糊查询
	public void test6() throws IOException{
		SqlSession session = MyBatisUtil.getSession();
		List<User> list = session.selectList("findLikeName", "%D%");
		for(User user:list){
			System.out.println(user.getName());
		}
		session.close();
	}
	
	@Test//测试删除
	public void test5() throws IOException{
		SqlSession session  = MyBatisUtil.getSession();
		//执行删除
		int rows = session.delete("deleteUser", 10);
		System.out.println("删除的记录行数:"+rows);
		session.commit();
		session.close();
	}
	
	@Test//测试更新
	public void test4() throws IOException{
		SqlSession session = MyBatisUtil.getSession();
		User user  = new User();
		user.setId(10);
		user.setName("MYBATIS");
		user.setAge(21);
		//执行更新
		int rows = session.update("updateUser", user);
		System.out.println("更新的记录行数:"+rows);
		//提交事物
		session.commit();
		session.close();
	}
	
	@Test//测试添加
	public void test3() throws IOException{
		SqlSession session = MyBatisUtil.getSession();
		User user = new User();
		user.setId(10);//也可由序列生成  ==
		user.setName("mybatis");
		user.setAge(20);
		//执行insert
		session.insert("saveUser", user);
		//提交事物(增删改需要提交事物)
		session.commit();
		session.close();
	}
	
	@Test//测试多行查询
	public void test2() throws IOException{
		SqlSession session = MyBatisUtil.getSession();
		//执行多行查询
		List<User>  list = session.selectList("findAll");
		for(User user:list){
			System.out.println(user.getId()+" "
								+user.getName()+" "
								+user.getAge());
		}
		session.close();
	}
	
	@Test//测试单行查询
	public void test1() throws IOException{
		SqlSession session = MyBatisUtil.getSession();
		System.out.println(session);
		//使用SqlSession执行SQL操作
		//selectOne("SQL定义的id属性",paramterType参数值)
		User user = session.selectOne("findById",1);
		if(user != null){
			System.out.println(user.getName());
			System.out.println(user.getAge());
		}else{
			System.out.println("没有该记录");
		}
		session.close();
	}

	@Test//测试获取SqlSession
	public void test() throws IOException{
		//SqlSessionFactoryBuilder
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
		//加载SqlMapConfig.xml主配置文件,
		//转化为Reader流参数
		String conf = "SqlMapConfig.xml";
		Reader reader = Resources.getResourceAsReader(conf);
		
		//SqlSessionFactory
		//加载配置信息获取SqlSession工厂
		SqlSessionFactory factory = builder.build(reader);
		//SqlSession,由工厂创建SqlSession对象
		SqlSession session = factory.openSession();
		System.out.println(session);
		
		//使用SqlSession执行SQL操作
		//selectOne("SQL定义的id属性",parameterType参数值)
		User user = session.selectOne("findById", 2);
		if(user != null){
			System.out.println(user.getName());
			System.out.println(user.getAge());
		}else{
			System.out.println("没有该记录");
		}
		session.close();
	}

}

UserDAO.java

package com.dk.dao;

import java.util.List;
import java.util.Map;

import com.dk.entity.User;
/**
 * Mapper映射器接口:对应UserMapper.xml里的SQL语句
 * 方法名-->id属性
 * 参数-->parameterType属性
 * 返回类型-->增删改void或int;查询参考resultType属性
 * @author Cher_du
 *
 */
public interface UserDAO {
	
	public User findById(int id);
	public List<User> findAll();
	public int saveUser(User user);
	public int updateUser(User user);
	public int deleteUser(int id);
	public List<User> findLikeName(String name);
	public Map<String,Object> findName(int id);
}

编写每一个方法对应依次运行test进行测试:

猜你喜欢

转载自blog.csdn.net/Coder_Boy_/article/details/82933835