mybatis详细总结

本文档详尽地介绍了如何开发第一个MyBatis程序,包括获取MyBatis驱动包、创建实体类、配置文件、测试类等。还讨论了mybatis提示信息配置,以及如何使用MyBatis实现CRUD操作。进一步讲解了使用Mapper动态代理优化程序、配置文件的各个细节,如properties属性、settings全局参数、类型处理器和别名定义。此外,还涵盖了MyBatis的输入和输出参数处理、动态SQL、关联查询、延迟加载、查询缓存的实现,以及逆向工程的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mybatis教程
mybatis驱动参数问题

mybatis详细总结:

一. 开发第一个MyBatis程序

1. 获取MyBatis驱动包

可以在官网http://blog.mybatis.org/https://github.com/mybatis/mybatis-3/releases中下载MyBatis的资源文件mybatis-3.x.x.zip

1). 下载过程

在这里插入图片描述
在这里插入图片描述

2). 导入jar包

在这里插入图片描述

2. 创建person类

package org.wajpzywj.entity;

public class Person {
   
   
	
	private int id;
	private String name;
	private int age;
	public Person() {
   
   
		super();
	}
	public Person(int id, String name, int age) {
   
   
		super();
		this.id = id;
		this.name = name;
		this.age = 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 int getAge() {
   
   
		return age;
	}
	public void setAge(int age) {
   
   
		this.age = age;
	}
	@Override
	public String toString() {
   
   
		return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
	

}

3. 创建表格person,还有数据

在这里插入图片描述
在这里插入图片描述

4. 在person同级目录中创建personMapper.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="org.wajpzywj.entity.personMapper">
	<select id="queryPersonById" resultType="org.wajpzywj.entity.Person" parameterType="int">
		select * from person where id=#{id}
	</select>
</mapper>

5. 在src下创建conf.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>
	<typeAliases>
		<package name="org.wajpzywj.entity" />
	</typeAliases>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC"/>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=GMT%2B8&amp;useSSL=false"/>
				<property name="username" value="root"/>
				<property name="password" value="root"/>
			</dataSource>
		</environment>
	</environments>
	 <!-- 在配置文件(conf.xml)中注册SQL映射文件(personMapper.xml)-->
	<mappers>
		<mapper resource="org/wajpzywj/entity/personMapper.xml" />
	</mappers>
	
</configuration>

6. 创建测试类 TestMyBatis

package org.wajpzywj.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 TestMyBatis {
   
   
	public static void main(String[] args) throws IOException {
   
   
		// 加载MyBatis配置文件(为了访问数据库)
		Reader reader = Resources.getResourceAsReader("conf.xml");
		 // 创建sqlSession 的工厂
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
		// 创建能够执行SQL映射文件中sql语句的sqlSession对象
		SqlSession session = sessionFactory.openSession();
		// 指定sql语句对应的标识字符串:namespace+id
		String statement = "org.wajpzywj.entity.personMapper.queryPersonById";
		// 执行查询,返回一个id为2的person对象
		Person person = session.selectOne(statement, 2);
		System.out.println(person);
		session.close();
	}
}

流程:

  1. MyBatis应用程序根据XML配置文件(conf.xml)创建SqlSessionFactory,
  2. 再由SqlSessionFactory创建一个SqlSession对象。
  3. SqlSession对象包含了执行SQL所需要的所有方法,可以直接运行映射的SQL语句,完成对数据的增删改查等操作。
    其中映射的SQL语句存放在一个SQL映射文件中(如personMapper.xml),应用程序可以通过SQL映射文件中的namespace+id找到对应的SQL语句。

二. mybatis提示信息配置

1. 联网状态,xml文件中有提示信息:alt + /;

在这里插入图片描述

2. 不联网需要导入

1). ctrl+ 点击链接,下载mybatis-3-config.dtd.

在这里插入图片描述

2). 进入配置 window => preferences

在这里插入图片描述

3). 将下载的文件配置进入

在这里插入图片描述

4). 此时在不联网的时候也会有提示

三.使用MyBatis实现CRUD

1. conf.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>
	<typeAliases>
		<package name="org.wajpzywj.entity" />
	</typeAliases>
	<environments default="development">
		<environment id="development">
		
			<!-- 事务提交方式:
					JDBC: 利用JDBC方式处理事务(commit rollback close)
					MANAGED: 将事务交由其他组件去托管(spring,jboss),默认关闭连接
					<transactionManager type="MANAGED"/>
						<property name="colseConnection" value="false"></property>
			 -->
			<transactionManager type="JDBC"/>
			
			<!-- 数据源类型:
					UNPOOLED: 传统的JDBC模式
					POOLED: 使用数据库连接池
					JNDI: 从tomcat中获取一个内置的数据库连接池(数据库连接池-数据源)
			 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=GMT%2B8&amp;useSSL=false"/>
				<property name="username" value="root"/>
				<property name="password" value="root"/>
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="org/wajpzywj/entity/studentMapper.xml" />
	</mappers>
	
</configuration>

2. studentMapper.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">

<!-- namespace:该mapper.xml 映射文件的唯一标识 -->
<mapper namespace="org.wajpzywj.entity.studentMapper">
	<!-- 后续通过 namespace.id -->
	<!-- parameterType:输入参数的类型
		 resultType: 查询返回结果值的类型,返回类型	
	 -->
	 <select id="queryStudentByNo" parameterType="int"
	  resultType="org.wajpzywj.entity.Student">
	  	select * from student where stuNo=#{stuNo}
	 </select>
	 
	 <insert id="addStudent" parameterType="org.wajpzywj.entity.Student">
	 	insert into student(stuNo, stuName,stuAge,graName) values(#{stuNo},#{stuName},#{stuAge},#{graName})
	 </insert>
	 
	 <delete id="deleteStudentByStuNo" parameterType="int">
	 	delete from student where stuNo=#{stuNo}
	 </delete>
	 
	 <update id="updateStudentByStuNo" parameterType="org.wajpzywj.entity.Student">
	 	update student set stuName=#{stuName}, stuAge=#{stuAge},graName=#{graName} where stuNo=#{stuNo}
	 </update>
	 
	 <select id="queryAllStudents" resultType="org.wajpzywj.entity.Student">
	 	select * from student
	 </select> 
</mapper>

3. test.java

package org.wajpzywj.test;

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

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.wajpzywj.entity.Student;

public class Test {
   
   
	public static void queryStudentByNo() throws IOException {
   
   
		Reader reader = Resources.getResourceAsReader("conf.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
		SqlSession session = sessionFactory.openSession();
		String statement = "org.wajpzywj.entity.studentMapper.queryStudentByNo";
		Student student = session.selectOne(statement,1);
		System.out.println(student);
		session.close();
	}
	
	public static void queryAllStudent() throws IOException {
   
   
		Reader reader = Resources.getResourceAsReader("conf.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
		SqlSession session = sessionFactory.openSession();
		String statement = "org.wajpzywj.entity.studentMapper.queryAllStudents";
		List<Student> students = session.selectList(statement);
		System.out.println(students);
		session.close();
	}
	
	public static void addStudent() throws IOException {
   
   
		Reader reader = Resources.getResourceAsReader("conf.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
		SqlSession session = sessionFactory.openSession();
		String statement = "org.wajpzywj.entity.studentMapper.addStudent";
		Student student = new Student(3,"zhangsan",45, "xiaohognshu");
		System.out.println(student);
		int count = session.insert(statement,student);
		session.commit();
		System.out.println("增加"+count+"个数据");
		session.close();
	}
	
	public static void updateStudentByStuNo() throws IOException {
   
   
		Reader reader = Resources.get
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值