其他分享
首页 > 其他分享> > MyBatis框架的使用(入门)

MyBatis框架的使用(入门)

作者:互联网

MyBatis框架

MyBatis前述

原生JDBC编程存在的问题

JDBC程序

public static void main(String[] args) {
			Connection connection = null;
			PreparedStatement preparedStatement = null;
			ResultSet resultSet = null;
			try {
				//①加载数据库驱动
				Class.forName("com.mysql.JDBC.Driver");
				//②通过驱动管理类获取数据库链接
				connection =  DriverManager.getConnection("JDBC:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "mysql");
				//定义sql语句 ?表示占位符
			String sql = "select * from user where username = ?";
				//③获取预处理statement
				preparedStatement = connection.prepareStatement(sql);
				//设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
				preparedStatement.setString(1, "王五");
				//④向数据库发出sql执行查询,查询出结果集
				resultSet =  preparedStatement.executeQuery();
				//遍历查询结果集
				while(resultSet.next()){
					System.out.println(resultSet.getString("id")+"  "+resultSet.getString("username"));
				}
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
				//⑤释放资源
				if(resultSet!=null){
					try {
						resultSet.close();
					} catch (SQLException e) {
						e.printStackTrace();
					}
				}
				if(preparedStatement!=null){
					try {
						preparedStatement.close();
					} catch (SQLException e) {
						 
						e.printStackTrace();
					}
				}
				if(connection!=null){
					try {
						connection.close();
					} catch (SQLException e) {
						 
						e.printStackTrace();
					}
				}

			}

		}

上边使用JDBC的原始方法(未经封装)实现了查询数据库表记录的操作。

JDBC编程步骤

  1. 加载数据库驱动
  2. 创建并获取数据库链接
  3. 创建JDBC statement对象
  4. 设置sql语句
  5. 设置sql语句中的参数(使用preparedStatement)
  6. 通过statement执行sql并获取结果
  7. 对sql执行结果进行解析处理
  8. 释放资源(resultSet、preparedstatement、connection)

JDBC存在问题

  1. 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
  2. Sql语句在代码中硬编码,造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
  3. 使用preparedStatement向占位符号传参数存在硬编码,因为sql语句的where条件不一定,可能多也可能少,修改sql还要修改代码,系统不易维护。
  4. 对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成pojo对象解析比较方便。

MyBatis简介

MyBatis

MyBatis特点

JDBC

Hibernate和JPA

MyBatis使用

第一个MyBatis项目

  1. 创建项目
  2. 构建路径(build path),添加mybatis及mysql相关jar包
  3. 创建数据库及数据表
  4. 创建mybatis核心配置文件
  5. 创建对应的JavaBean和SQL映射文件
  6. 创建测试类

运行环境

创建步骤

解压缩

在这里插入图片描述

再将压缩中DTD文件复制到桌面

在这里插入图片描述
通过压缩软件打开

打开eclipse

在这里插入图片描述

添加对应DTD文件

找到preferences->XML->XML Catalog ->add
location 写自己存放的dtd文件路径,key就写
http://mybatis.org/dtd/mybatis-3-config.dtd
点击OK
在这里插入图片描述
再add另一个DTD文件,location写存放文件路径。key写mybatis.org/dtd/mybatis-3-mapper.dtd
最后点击OK,再点击Apply and Close
在这里插入图片描述

创建Java项目

在这里插入图片描述
添加相关的jar包(相关jar包资源
提取码:u5bm

在这里插入图片描述
设置JUnit
在这里插入图片描述
根据自己的JUnit版本来设置

自己创建过后,如图
在这里插入图片描述

Mybatis使用

//实体类
package lab_mybatis2.mybatis.bean;

public class Teacher {
	
	private int id;
	private String name;
	private String email;
	private String gender;
	private int age;
	
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age=age;
	}
	@Override
	public String toString() {
		return "Teacher [id=" + id + ", name=" + name + ", email="
				+ email + ", gender=" + gender +",age"+age+ "]";
	}
	
	

}

//接口类
package lab_mybatis2.mybatis.dao;

import lab_mybatis2.mybatis.bean.Teacher;

public interface TeacherMapper {
	
	public Teacher getTeacherById(int id);
	public int addTeacher(Teacher newnoe);
	public int updateTeacher(Teacher updatenoe );
	public int deleteTeacherById(Integer id);

}

//测试类
package lab_mybatis2.mybatis.test;

import java.io.IOException;
import java.io.InputStream;

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 org.junit.Test;

import lab_mybatis2.mybatis.bean.Teacher;
import lab_mybatis2.mybatis.dao.TeacherMapper;

/**
 * 1、SqlSession代表和数据库的一次会话;用完必须关闭;
 * 2、SqlSession和connection一样她都是非线程安全。每次使用都应该去获取新的对象。
 * 3、两个重要的配置文件:
 * 		mybatis的全局配置文件:包含数据库连接池信息,事务管理器信息等...系统运行环境信息
 * 		sql映射文件:保存了每一个sql语句的映射信息:
 * 			将sql抽取出来。	
 *
 */

public class MyBatisTest {

	public SqlSessionFactory getSqlSessionFactory() throws IOException {
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		return new SqlSessionFactoryBuilder().build(inputStream);
	}
	
/**
	 * 1、根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象 有数据源一些运行环境信息
	 * 2、sql映射文件;配置了每一个sql,以及sql的封装规则等。 
	 * 3、将sql映射文件注册在全局配置文件中
	 * 4、写代码:
	 * 		1)、根据全局配置文件得到SqlSessionFactory;
	 * 		2)、使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查
	 * 			一个sqlSession就是代表和数据库的一次会话,用完关闭
	 * 		3)、使用sql的唯一标志来告诉MyBatis执行哪个sql。sql都是保存在sql映射文件中的。
	 * 
	 * @throws IOException
	 */
	
	
	@Test
	public void testselectTeacherById() throws IOException {
	// 2、获取sqlSession实例,能直接执行已经映射的sql语句
		// sql的唯一标识:statement Unique identifier matching the statement to use.
		// 执行sql要用的参数:parameter A parameter object to pass to the statement.
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		SqlSession openSession = sqlSessionFactory.openSession();
		try {
			TeacherMapper mapper = openSession.getMapper(TeacherMapper.class);
			Teacher teacher = mapper.getTeacherById(1);
			System.out.println(mapper.getClass());
			System.out.println(teacher);
		} finally {
			openSession.close();
		}

	}
	
	@Test
	public void testAddTeacher() throws IOException{
		SqlSessionFactory sqlSessionFactory=getSqlSessionFactory();
		SqlSession openSession=sqlSessionFactory.openSession();
		try {
			TeacherMapper mapper=openSession.getMapper(TeacherMapper.class);
			Teacher teacher=new Teacher();
			teacher.setName("my");
			teacher.setAge(22);
			teacher.setGender("男");
			teacher.setId(123);
			teacher.setEmail("123@qq.com");
			int rows=mapper.addTeacher(teacher);
			openSession.commit();
			System.out.println(rows);
		}finally {
			openSession.close();
		}
	}
	
	@Test
	public void testUpdateTeacher() throws IOException{
		SqlSessionFactory sqlSessionFactory=getSqlSessionFactory();
		SqlSession openSession=sqlSessionFactory.openSession();
		try {
			TeacherMapper mapper=openSession.getMapper(TeacherMapper.class);
			Teacher teacher=new Teacher();
			teacher.setName("mmm");
			teacher.setAge(23);
			teacher.setGender("女");
			teacher.setId(123);
			teacher.setEmail("234@qq.com");
			int rows=mapper.updateTeacher(teacher);
			System.out.println(rows);
		}finally {
			openSession.close();
		}
	}
	
	@Test
	public void testDeleteTeacher() throws IOException{
		SqlSessionFactory sqlSessionFactory=getSqlSessionFactory();
		SqlSession openSession=sqlSessionFactory.openSession();
		try {
			TeacherMapper mapper=openSession.getMapper(TeacherMapper.class);
			int rows=mapper.deleteTeacherById(1);
			openSession.commit();
			System.out.println(rows);
		}finally {
			openSession.close();
		}
	}
	

}

配置文件

先创建文件file,命名为log4j.properties
在这里插入图片描述

log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

创建xml文件
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击finish,完成创建

配置mybatis-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/computer_dept" />
				<property name="username" value="root" />
				<property name="password" value="root" />
			</dataSource>
		</environment>
	</environments>
	<!-- 将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中 -->
	<mappers>
		<mapper resource="TeacherMapper.xml" />
	</mappers>
</configuration>

再创建它的映射文件
在这里插入图片描述
同样选DTD file
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置TeacherMapper.xml文件

//根据自己所需要的数据库操作来写代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "mybatis.org/dtd/mybatis-3-mapper.dtd" "mybatis-3-mapper.dtd" >
<mapper namespace="lab_mybatis2.mybatis.dao.TeacherMapper">
  <select id="getTeacherById" resultType="lab_mybatis2.mybatis.bean.Teacher">
  	select id,name,gender,age,email from teachers where id=#{id} 
  </select>
  
  <insert id="addTeacher" parameterType="lab_mybatis2.mybatis.bean.Teacher">
  	insert into teachers (id,name,gender,age,email) values(#{id},#{name},#{gender},#{age},#{email})
  </insert>
  
  <update id="updateTeacher" parameterType="lab_mybatis2.mybatis.bean.Teacher">
  	update teachers set id=#{id},name=#{name},gender=#{gender},age=#{age},email=#{email} where id=#{id}
  </update>
  
  <delete id="deleteTeacherById" parameterType="Integer">
  	delete from teachers where id=#{id}
  </delete>
</mapper>

最终效果

在这里插入图片描述
测试效果
在这里插入图片描述
数据库
在这里插入图片描述

测试中的问题

openSession.commit();//commit() 手动提交		数据库操作完成之后,要提交事务,数据库才会更新数据
openSession.commit(true);	//自动提交

这个是跟自己的数据库表中的字段名有关系,要保证代码写的字段名数据库名一致
(记住字段名前面不要加空格,因为空格不好看出来)空格!!!

标签:入门,框架,openSession,id,mybatis,sql,MyBatis,public
来源: https://blog.csdn.net/weixin_48469177/article/details/117488242