我的mybatis入门

我对mybatis的理解

mybatis是干什么的?

Mybatis是一个框架,对jdbc的数据库操作过程进行封装,开发者不必处理注册驱动、创建Connection等操作,只关注sql即可

我理解的mybatis工作原理

通过xml将要执行的statement配置起来,通过java对象(UserMapper.java)和statement(UserMapper.xml)中的sql进行映射生成最终执行的sql语句,最终由mybatis执行sql,并将结果映射成java对象并返回

mybatis入门程序步骤

创建数据库,建表略

新建java项目,引入jar包,结果如图导入jar包后目录图

在src下新建jdbc.properties文件,配置连接数据库信息,全局配置,方便统一管理

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=111111

在src下新建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

在src下新建sqlMapConfig.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>
	<!-- 引入jdbc.properties,可以统一管理配置信息 -->
	<properties resource="jdbc.properties" />

	<!-- 别名 -->
	<typeAliases>
		<!-- bean对象所在目录,配置过后UserMapper.xml中resultType可只写类名,不必写类的全路径 -->
		<package name="com.syw.bean" />
	</typeAliases>

	<!-- 和spring整合后 environments配置将废除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理 -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="${driver}" />
				<property name="url" value="${url}" />
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>

	<mappers>
		<!-- 如果使用mapper,可以新建一个文件夹,单独放xml文件,通过resource属性引入。 
		com.syw.mapper里边只放同名的java文件,但是随着mapper文件的增多,mappers会很多行 -->
		<!-- <mapper resource="sqlMapper/UserMapper"/> -->
		<!-- 可以指定到包目录下,一行代码搞定 -->
		<package name="com.syw.mapper" />
	</mappers>
</configuration>

创建bean对象

package com.syw.bean;

public class User {
	private int id;
	private String name;
	private int age;

	//get set toString方法略
}

创建UserMapper

package com.syw.mapper;

import com.syw.bean.User;

public interface UserMapper {
//	遵循4个原则
//	1.返回类型与UserMapper.xml中一致
//	2.参数类型与UserMapper.xml中一致
//	3.方法名与UserMapper.xml中id一致
//	4.UserMapper.xml中namespace与接口路径一致
	public User queryUserById(Integer id);
}

创建UserMapper.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:命名空间,用于隔离sql,当有多个mapper.xml时,可以通过命名空间找到对应的方法 -->
<mapper namespace="com.syw.mapper.UserMapper">
	<!-- resultType在sqlMapConfig.xml未配置别名之前,需要写全路径的名称。配置过别名之后,写成类名(不区分大小写) -->
	<select id="queryUserById" parameterType="Integer" resultType="User">
		select * from user2 where id = #{value}
	</select>
	
	<!-- 如果传入的参数是简单数据类型,${}里面必须写value -->
	<!-- 可以写#{value}  java文件里边写"%王%" -->
	<!-- 可以写%${value}%  java文件里边写"王" -->
	<select id="queryMohuUserById" parameterType="String" resultType="User">
		select * from user2 where name LIKE '%${value}%'
	</select>
	
	<!-- 新增用户 -->
	<insert id="addUser" parameterType="User" >
		insert into user2 (name,age) values (#{name},#{age})
	</insert>
	
	<!-- 修改用户 -->
	<update id="updateUser" parameterType="User" >
		update user2 set name=#{name} where id = #{id}
	</update>
	
	<!-- 删除用户 -->
	<delete id="deleteUser" parameterType="Integer">
		delete from user2 where id = #{value}
	</delete>
</mapper>

使用测试类,测试mapper

package com.syw.test;

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 com.syw.bean.User;
import com.syw.mapper.UserMapper;

/**
 * 测试Mapper的动态代理功能
 * 
 * @author Administrator
 *
 */
public class TestMapper {
	/**
	 * 查询单个
	 */
	@Test
	public void selectOneMybatis() throws Exception {
		// 基本操作
		InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession sqlSession = sqlSessionFactory.openSession();
		// sqlSession获取Mapper
		// 要求UserMapper.java和UserMapper.xml必须同名且在同一包内
		UserMapper mapper = sqlSession.getMapper(UserMapper.class);
		User user = mapper.queryUserById(1);
		System.out.print(user);
	}
}

对比未使用mapper方式的查询方法

package com.syw.test;

import java.io.InputStream;
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.junit.Test;

import com.syw.bean.User;

public class TestMybatis {

	/**
	 * 查询单个
	 * */
	@Test
	public void selectOneMybatis() throws Exception {
		InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession sqlSession = sqlSessionFactory.openSession();
		//user.queryUserById中user是UserMapper.xml中命名空间的名字,如果不使用UserMapper.java的方式,可以任意命名,但是如果使用了UserMapper.java的方式,命名空间中的名字必须是UserMapper.java的全路径名字
		User user = sqlSession.selectOne("user.queryUserById", 3);
		System.out.print(user);
	}
	
	/**
	 * 模糊查询
	 * */
	@Test
	public void selectmohuMybatis() throws Exception {
		InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession sqlSession = sqlSessionFactory.openSession();
		List<User> user = sqlSession.selectList("user.queryMohuUserById", "三");
		for(int i=0;i<user.size();i++){
			System.out.print(user.get(i).getName());
		}
		
	}
	
	/**
	 * 新增用户
	 * */
	@Test
	public void addUserMybatis() throws Exception {
		InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession sqlSession = sqlSessionFactory.openSession();
		User user=new User();
		user.setId(6);
		user.setAge(30);
		user.setName("张三丰");
		sqlSession.insert("user.addUser", user);
		// 需要进行事务提交
		sqlSession.commit();
		// 7. 释放资源
		sqlSession.close();
	}
	
	/**
	 * 修改用户
	 * */
	@Test
	public void updateUserMybatis() throws Exception {
		InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession sqlSession = sqlSessionFactory.openSession();
		User user=new User();
		user.setId(6);
		user.setAge(20);
		user.setName("张四丰");
		sqlSession.update("user.updateUser", user);
		// 需要进行事务提交
		sqlSession.commit();
		// 7. 释放资源
		sqlSession.close();
	}
	
	/**
	 * 删除用户
	 * */
	@Test
	public void deleteUserMybatis() throws Exception {
		InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession sqlSession = sqlSessionFactory.openSession();
		sqlSession.delete("user.deleteUser", 6);
		// 需要进行事务提交
		sqlSession.commit();
		// 7. 释放资源
		sqlSession.close();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值