mybatis使用学习

简介

MyBatis是一款持久层框架。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的java对象)映射成数据库中的记录。

一、

1.准备

(1)创建普通java项目即可

(2)添加依赖的jar包

mybatis-3.4.5.jar

mysql-connector-java-5.1.45-bin.jar

(3)创建数据库和表

create database mybatis;
use mybatis;
create table users(id int primary key auto_increment, name varchar(20), age int);
insert into users(name, age) values('aaaa', 9);
insert into users(name, age) values('bbbb', 8);
2.添加Mybatis的配置文件conf.xml

在src下新建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/mybatis" />
                <property name="username" value="root" />
                <property name="password" value="xx" />
            </dataSource>
        </environment>
    </environments>
</configuration>
3.建立domain包,在domain包下建立实体类User,User类代码如下:

package com.mybatis.domain;

public class User {

	private int id;
	private String name;
	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 int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
}
4.新建mapping包,用于存放sql映射文件。在mapping下创建UserMapper.xml
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">
<mapper namespace="com.mybatis.mapping.UserMapper">
	<select id="getUser" parameterType="int" resultType="com.mybatis.domain.User">
		select * from users where age = #{age}
	</select>
</mapper>
5.在conf.xml中注册UserMapper文件

<?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/mybatis" />
                <property name="username" value="root" />
                <property name="password" value="123465" />
            </dataSource>
        </environment>
    </environments>
	
	<mappers>
		<mapper resource="com/mybatis/mapping/UserMapper.xml" />
	</mappers>
    
</configuration>
6.在domain包下创建Test类编写测试代码
package com.mybatis.domain;

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 com.mybatis.mapping.UserMapper;

public class Test {

	public static void main(String[] args) {
		//mybatis的配置文件
		String resource = "conf.xml";
		//使用类加载器加载mybatis的配置文件
		InputStream is = null;
		try {
			is = Resources.getResourceAsStream(resource);
		} catch (IOException e) {
			e.printStackTrace();
		}
		//构建sqlSession的工厂
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
		
		SqlSession session = sqlSessionFactory.openSession();
		try {
			User user = session.selectOne("com.mybatis.mapping.UserMapper.getUser", 9);
			System.out.println(user);
		} finally {
			session.close();
		}
	}

}
7.执行Test,得到结果

-------------------------------------------------------------

二、

在MyBatis的官方教程中,还有一种推荐写法:

BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
这种方法有很多优势,首先它不是基于字符串常量的,就会更安全;其次,如果你的 IDE 有代码补全功能,那么你可以在有了已映射 SQL 语句的基础之上利用这个功能。
-------------------------------------------------------------

三、实现这种方式,需要在mapping中建立一个接口UserMapper

UserMapper代码如下:

package com.mybatis.mapping;

import com.mybatis.domain.User;

public interface UserMapper {

	public User findUserById(int age);
}

修改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">
<mapper namespace="com.mybatis.mapping.UserMapper">
 	<!--
	<select id="getUser" parameterType="int" resultType="com.mybatis.domain.User">
		select * from users where age = #{age}
	</select>
	 -->

	 <select id="findUserById" parameterType="int" resultType="com.mybatis.domain.User">
	 	select * from users where  age = #{age}
	 </select>
</mapper>
测试类Test就可以用这种方式了:

package com.mybatis.domain;

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 com.mybatis.mapping.UserMapper;

public class Test {

	public static void main(String[] args) {
		//mybatis的配置文件
		String resource = "conf.xml";
		//使用类加载器加载mybatis的配置文件
		InputStream is = null;
		try {
			is = Resources.getResourceAsStream(resource);
		} catch (IOException e) {
			e.printStackTrace();
		}
		//构建sqlSession的工厂
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
		
		SqlSession session = sqlSessionFactory.openSession();
		try {
			UserMapper userMapper = session.getMapper(UserMapper.class);
			User user = userMapper.findUserById(9);
			//User user = session.selectOne("com.mybatis.mapping.userMapper.getUser", 9);
			System.out.println(user);
		} finally {
			session.close();
		}
	}

}
另外,xml配置中注册mapper的方式也可以改为:

	<mappers>
		<!-- <mapper resource="com/mybatis/mapping/UserMapper.xml" /> -->
		<mapper class="com.mybatis.mapping.UserMapper" />
	</mappers>

注意:如果有重复的age值,运行会出现以下错误,建议使用id值查找!

Expected one result (or null) to be returned by selectOne(), but found: 2

四、配置文件说明

1、配置文件conf.xml是mybatis用来建立sessionFactory,里面主要包含了数据库连接相关内容,还有java类所对应的别名。比如,<typeAlias alias="User" type="com.mybatis.domain.User" />,这个别名非常重要,在具体的类的映射中,比如UserMapper.xml中resultType就是对应这个,要保持一直。(上面没有用到)

2、conf.xml里面的<mapper resource="com/mybatis/domain/UserMapper.xml" />是包含要映射的类的xml配置文件。

3、在UserMapper.xml文件里面主要是定义各种SQL语句,以及这些语句的参数,以及要返回的类型。

4、引用资源文件时,用斜杠/,比如"com/mybatis/domain/UserMapper.xml"。

引用类路径时用点.并且没有后缀,比如"com.mybatis.domain.User"。

本文参考了下面的文章:

https://www.cnblogs.com/jeffen/p/6211186.html

https://www.cnblogs.com/jway1101/p/5773263.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值