MyBatis入门实战

一、Mybatis概述

MyBatis是一个支持普通SQL查询、存储过程以及高级映射的持久层框架,它消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索,并使用简单的XML或注解进行配置和原始映射,用以将接口和Java的POJO(Plain Old Java Object,普通Java对象)映射成数据库中的记录,使得Java开发人员可以使用面向对象的编程思想来操作数据库。

二、准备工作

  • 需要的jar包
    在这里插入图片描述
    mybatis核心包下载处
    其他jar包下载处,自行搜索
    使用MyBatis框架非常简单,只需在应用程序中引入MyBatis的核心包mybatis-3.4.2.jar和其它三个jar包就OK了

  • 创建工程
    在Eclipse中创建一个名为Mybatis-01的Dynamic Web Project项目,将前面准备的jar包一同添加到项目的lib目录下,并发布到类路径中
    在这里插入图片描述

  • 目录结构展示

三、MyBatis入门程序

1.建立MySQL数据库和表并插入几条数据

#创建db_mybatis数据库
create database db_mybatis;
use db_mybatis;
#创建user表
create table user(
	id int primary key auto_increment,
	username varchar(50),
	jobs varchar(50),
	phone varchar(50)
);
#添加数据
insert into user values(1,'allen','player','13544486483');
insert into user values(2,'kevin','student','15574222068');
insert into user values(3,'rose','teacher','15513515138');

2.导入log4j.properties文件
由于MyBatis默认使用log4j输出日志信息,因此如果要查看控制台的输出SQL语句,就需要在classpath路径下配置其日志文件。在项目的src目录下创建log4j.properties文件

#Global logging configuration
log4j.rootLogger = ERROR , STDOUT
#MyBatis logging configuration
log4j.logger.com.ssm=DEBUG
#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

3.创建实体类
在src目录下创建一个kevin.mybatis.pojo包,在该包下创建持久化类User,并在类中声明id、username、jobs和phone属性,及其对应的getter/setter法。
在这里插入图片描述
4.创建UserDao接口
在src目录下创建一个kevin.mybatis.dao包,并在包中创建UserDao接口

package kevin.mybatis.dao;

import java.util.List;
import org.apache.ibatis.annotations.Param;
import kevin.mybatis.pojo.User;

public interface UserDao {
    
    
	//查询所有
	List<User> findAllUser();
	
	//通过id查询
	User findUserById(int id);
	
	//模糊查询
	List<User> findUserByName(String name);
	
	//添加用户
	int addUser(User user);
	
	//修改用户
	int updateUser(User user);
	
	//删除用户
	int deleteUser(int id);
	
}

5.创建UserMapper.xml映射文件
在刚刚创建的kevin.mybatis.dao包下创建一个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属性:通过全限定类名找到你所创建的UserDao接口 -->
<mapper namespace="kevin.mybatis.dao.UserDao">
	<!-- 查询所有 -->
	<select id="findAllUser" resultType="kevin.mybatis.pojo.User">
		select * from user
	</select>
	<!-- 通过id查询 -->
	<select id="findUserById" parameterType="int" resultType="kevin.mybatis.pojo.User">
		select * from user where id = #{id}
	</select>
	<!-- 模糊查询 -->
	<select id="findUserByName" parameterType="string" resultType="kevin.mybatis.pojo.User">
		select * from user where username like concat('%',#{username},'%')
	</select>
	<!-- 添加用户 -->
	<insert id="addUser" parameterType="kevin.mybatis.pojo.User">
		insert into user(username , jobs , phone) 
		values(#{username} , #{jobs} , #{phone})
	</insert>
	<!-- 修改用户 -->
	<update id="updateUser" parameterType="kevin.mybatis.pojo.User">
		update user set username = #{username} , jobs = #{jobs} , phone = #{phone} where id = #{id}
	</update>
	<!-- 通过id删除用户 -->
	<delete id="deleteUser" parameterType="int">
		delete from user where id = #{id}
	</delete>
	
</mapper>

<mapper>元素是配置文件的根元素,包含一个namespace属性,该属性为<mapper>元素指定了唯一的命名空间,通常会设置成“包名+SQL映射文件名”的形式。子元素<select>中的信息是用于执行查询操作的配置,其id属性是<select>元素在映射文件中的唯一标识;parameterType属性用于指定传入参数的类型;resultType属性用于指定返回结果的类型。

6.创建核心配置文件mybatis-config.xml
在src目录下创建MyBatis的核心配置文件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>
    <!-- 1.配置环境,默认的环境id为mysql -->
    <environments default="mysql">
    	<!-- 2.配置id为mysql的数据库环境 -->
        <environment id="mysql">
        	<!-- 使用JDBC的事务管理 -->
            <transactionManager type="JDBC"/>
            <!-- 数据库连接池 -->
            <dataSource type="POOLED">
            	<!-- 驱动类 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!-- url -->
                <property name="url" value="jdbc:mysql:///db_mybatis?characterEncoding=utf8"/>
                <!-- mysql用户名 -->
                <property name="username" value="root"/>
                <!-- mysql密码 -->
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
	    <!-- 3.配置UserMapper的位置 -->
        <mapper resource="kevin/mybatis/dao/UserMapper.xml"/>
    </mappers>
</configuration>

7.创建核心对象
在src目录下创建一个kevin.mybatis.utils包,在该包下创建工具类MyBatisUtils

扫描二维码关注公众号,回复: 11950962 查看本文章
package kevin.mybatis.utils;

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;

public class MyBatisUtils {
    
    
	//配置文件名
	static String config = "mybatis-config.xml";
	static SqlSession session;
	
	static {
    
    
		try {
    
    
			//读取配置文件
			InputStream in = Resources.getResourceAsStream(config);
			//根据配置文件构建SqlSessionFactory
			SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
			//通过factory.openSession()创建SqlSession
			session = factory.openSession();
			
		} catch (IOException e) {
    
    
			e.printStackTrace();
		}
	}
	
	//返回SqlSession对象
	public static SqlSession createSqlSession() {
    
    
		return session;
	}
	
}

8.测试
在src目录下创建一个kevin.mybatis.test包,在该包下创建测试类MyBatisTest

package kevin.mybatis.test;

import java.io.IOException;
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 kevin.mybatis.pojo.User;
import kevin.mybatis.utils.MyBatisUtils;

public class MyBatisTest {
    
    
	
	//查询所有
	@Test
	public void findAllTest() {
    
    
		SqlSession session = MyBatisUtils.createSqlSession();
		List<User> users = session.selectList("kevin.mybatis.dao.UserDao.findAllUser");
		for (User user : users) {
    
    
			System.out.println(user);
		}
		session.close();
	}
	
	//通过id查询
	@Test
	public void findUserByIdTest() {
    
    
		SqlSession session = MyBatisUtils.createSqlSession();
		User user = session.selectOne("kevin.mybatis.dao.UserDao.findUserById" , 2);
		System.out.println(user);
		session.close();
	}
	
	//模糊查询
	@Test
	public void findUserByNameTest() {
    
    
		SqlSession session = MyBatisUtils.createSqlSession();
		List<User> users = session.selectList("kevin.mybatis.dao.UserDao.findUserByName","n");
		for (User user : users) {
    
    
			System.out.println(user);
		}
		session.close();
	}
	
	//添加用户
	@Test
	public void addUserTest() {
    
    
		SqlSession session = MyBatisUtils.createSqlSession();
		User u = new User();
		u.setJobs("singer");
		u.setUsername("steven");
		u.setPhone("135846897534");
		int rows = session.insert("kevin.mybatis.dao.UserDao.addUser", u);
		if(rows > 0) {
    
    
			System.out.println("添加成功");
		}else {
    
    
			System.out.println("添加失败");
		}
		session.commit();
		session.close();
	}
	
	//修改用户
	@Test
	public void updateUserTest() {
    
    
		SqlSession session = MyBatisUtils.createSqlSession();
		User u = new User();
		u.setId(1);
		u.setJobs("singer");
		u.setUsername("bob");
		u.setPhone("135846897534");
		int rows = session.update("kevin.mybatis.dao.UserDao.updateUser", u);
		if(rows > 0) {
    
    
			System.out.println("修改成功");
		}else {
    
    
			System.out.println("修改失败");
		}
		session.commit();
		session.close();
	}
	
	//修改用户
	@Test
	public void deleteUserTest() {
    
    
		SqlSession session = MyBatisUtils.createSqlSession();
		int id = 2;
		int rows = session.delete("kevin.mybatis.dao.UserDao.deleteUser", id);
		if(rows > 0) {
    
    
			System.out.println("删除成功");
		}else {
    
    
			System.out.println("删除失败");
		}
		session.commit();
		session.close();
	}
	/*注意:
		其中操作insert、update、delete,需要提交事务,即session.commit();
		如果不提交事务,并不会报错,但是数据不会改变
	*/
	
}

9.结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44511121/article/details/109129941
今日推荐