mybatis简介

mybatis是一个持久层框架。原来叫ibatis。改名为mybatis。版本比较稳定。

mybatis让程序将主要精力放在sql上,通过mybatis提供的映射功能,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。

mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)

框架结构图

  

mybatis框架的主配置文件中配置数据源、事务等信息,根据主配置文件获得SqlSessionFactory,用SqlSessionFactory生产SqlSession,利用SqlSession进行CRUD操作。

入门程序

实例一:

 根据用户表主键查询用户:

准备框架环境

1. 创建java se、java ee项目

2. 导入mybatis需要的jar包,数据库驱动包。

  

3. 在classpath下创建log4j.properties属性文件。

4. 在classpath下创建mybatis框架的核心配置文件,名称任意。 习惯叫mybatis.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">

5. 编写pojo实体类。

6. 创建映射文件,且实现功能。

mapper namespace="user">
<!-- select标签写查询
id: 指定标签的唯一标识
parameterType:指定输入参数的类型
#{} : 向sql中注入参数值, 相当于 ps的? , 如果参数是简单类型 , 花括号中可以是任意值
resultType: 指定查询到的结果的输出映射.
-->
<select id="selectUserById" parameterType="java.lang.Integer" resultType="com.mybatis01.pojo.UserPojo">
SELECT sno,sname,sex,addr FROM student WHERE sno=#{sno}
</select>
</mapper>

7. 在主配置文件中加载映射文件。

  <mappers>
   <mapper resource="com/mybatis01/mapper/UserDao.xml"></mapper>
  </mappers>

8. 编写测试程序进行测试。

  用Resources类读取主配置文件

  用SqlSessionFactoryBuilder类创建SqlSessionFactory对象

  获得SqlSession对象

  调用statement

  关闭SqlSession

代码实现:

目录结构:

 

log4j.properties属性文件(log4j.properties):

# Global logging configuration
#\u5728\u5f00\u53d1\u73af\u5883\u4e0b\u65e5\u5fd7\u7ea7\u522b\u8981\u8bbe\u7f6e\u6210DEBUG\uff0c\u751f\u4ea7\u73af\u5883\u8bbe\u7f6e\u6210info\u6216error
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

mybatis框架的核心配置文件(mybatis.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>
<!--数据库配置,default表示默认采用哪一个数据库环境-->
<environments default="development">
<!--id为development表示开发环境数据库,id为product表示生产环境数据库-->
<environment id="development">
<!--使用JDBC事务管理-->
<transactionManager type="JDBC"></transactionManager>
<!--连接池配置,type为POOLED采用连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mysql_test"/>
<property name="username" value="root"/>
<property name="password" value="13474501003"/>
</dataSource>
</environment>
</environments>
<!--加载映射文件-->
<mappers>
<mapper resource="com/mybatis01/mapper/UserDao.xml"></mapper>
</mappers>
</configuration>

pojo实体类(UserPojo.java):

package com.mybatis01.pojo;


public class UserPojo {
private Integer sno;
private String sname;
private Character sex;
private String addr;

//
public Integer getSno() {
return sno;
}

public void setSno(Integer sno) {
this.sno = sno;
}

public String getSname() {
return sname;
}

public void setSname(String sname) {
this.sname = sname;
}

public Character getSex() {
return sex;
}

public void setSex(Character sex) {
this.sex = sex;
}

public String getAddr() {
return addr;
}

public void setAddr(String addr) {
this.addr = addr;
}
//
@Override
public String toString() {
return "UserPojo{" +
"sno=" + sno +
", sname='" + sname + '\'' +
", sex=" + sex +
", addr='" + addr + '\'' +
'}';
}
}

映射文件(UserDao.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">
<!-- 分类sql语句,可以自定义 -->
<mapper namespace="user">
<!-- select标签写查询
id:指定标签的唯一标识
parameterType:指定输入参数的类型
#{}:向sql中注入参数值,相当于ps的? 如果参数是简单类型,花括号中可以是任意值
resultType:指定查询到的结果的输出映射.
-->
<select id="selectUserById" parameterType="java.lang.Integer" resultType="com.mybatis01.pojo.UserPojo">
SELECT sno,sname,sex,addr FROM student WHERE sno=#{sno}
</select>
</mapper>

junit单元测试(Test.java):

package com.mybatis01.test;

import com.mybatis01.pojo.UserPojo;
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 java.io.InputStream;

public class Test {
@org.junit.Test
public void test() throws Exception{
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = factory.openSession();

UserPojo userPojo = session.selectOne("user.selectUserById",102);
System.out.println(userPojo);

session.close();
}

}

数据库:

运行结果:

查询sno=102的信息

 

实例二:

 根据用户名模糊查询:

同实例一一样,只需要修改映射文件,其他都大同小异

代码实现:

目录结构:

log4j.properties属性文件(log4j.properties):

# Global logging configuration
#\u5728\u5f00\u53d1\u73af\u5883\u4e0b\u65e5\u5fd7\u7ea7\u522b\u8981\u8bbe\u7f6e\u6210DEBUG\uff0c\u751f\u4ea7\u73af\u5883\u8bbe\u7f6e\u6210info\u6216error
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

mybatis框架的核心配置文件(mybatis.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>
<!--数据库配置,default表示默认采用哪一个数据库环境-->
<environments default="development">
<!--id为development表示开发环境数据库,id为product表示生产环境数据库-->
<environment id="development">
<!--使用JDBC事务管理-->
<transactionManager type="JDBC"></transactionManager>
<!--连接池配置,type为POOLED采用连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mysql_test"/>
<property name="username" value="root"/>
<property name="password" value="13474501003"/>
</dataSource>
</environment>
</environments>
<!--加载映射文件-->
<mappers>
<mapper resource="com/mybatis01/mapper/UserDao.xml"></mapper>
</mappers>
</configuration>

pojo实体类(UserPojo.java):

package com.mybatis01.pojo;


public class UserPojo {
private Integer sno;
private String sname;
private Character sex;
private String addr;

//
public Integer getSno() {
return sno;
}

public void setSno(Integer sno) {
this.sno = sno;
}

public String getSname() {
return sname;
}

public void setSname(String sname) {
this.sname = sname;
}

public Character getSex() {
return sex;
}

public void setSex(Character sex) {
this.sex = sex;
}

public String getAddr() {
return addr;
}

public void setAddr(String addr) {
this.addr = addr;
}
//
@Override
public String toString() {
return "UserPojo{" +
"sno=" + sno +
", sname='" + sname + '\'' +
", sex=" + sex +
", addr='" + addr + '\'' +
'}' + '\n';
}
}

映射文件(UserDao.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">
<!-- 分类sql语句,可以自定义 -->
<mapper namespace="user">
<!--
${}:把参数原封不动拼接到sql中 , 有sql注入问题.
${}:参数值如果是简单类型 ,花括号中只能用value
resultType:如果输出映射为集合,只指定集合中元素的类型
-->
<select id="selectUserByName" parameterType="java.lang.String" resultType="com.mybatis01.pojo.UserPojo">
SELECT sno,sname,sex,addr FROM student WHERE sname LIKE '%${value}%'
</select>

</mapper>

junit单元测试(Test.java):

package com.mybatis01.test;

import com.mybatis01.pojo.UserPojo;
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 java.io.InputStream;
import java.util.List;

public class Test {
@org.junit.Test
public void test() throws Exception{
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = factory.openSession();


List<UserPojo> userPojo = session.selectList("user.selectUserByName","贾");
System.out.println(userPojo);

session.close();
}

}

数据库:

运行结果:

模糊查询sname中包含“贾”

实例三:

 添加用户:

代码实现:

log4j.properties属性文件(log4j.properties):

# Global logging configuration
#\u5728\u5f00\u53d1\u73af\u5883\u4e0b\u65e5\u5fd7\u7ea7\u522b\u8981\u8bbe\u7f6e\u6210DEBUG\uff0c\u751f\u4ea7\u73af\u5883\u8bbe\u7f6e\u6210info\u6216error
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 

mybatis框架的核心配置文件(mybatis.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>
<!--数据库配置,default表示默认采用哪一个数据库环境-->
<environments default="development">
<!--id为development表示开发环境数据库,id为product表示生产环境数据库-->
<environment id="development">
<!--使用JDBC事务管理-->
<transactionManager type="JDBC"></transactionManager>
<!--连接池配置,type为POOLED采用连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mysql_test"/>
<property name="username" value="root"/>
<property name="password" value="13474501003"/>
</dataSource>
</environment>
</environments>
<!--加载映射文件-->
<mappers>
<mapper resource="com/mybatis01/mapper/UserDao.xml"></mapper>
</mappers>
</configuration>

pojo实体类(UserPojo.java):

package com.mybatis01.pojo;


public class UserPojo {
private Integer sno;
private String sname;
private Character sex;
private Integer age;
private String addr;

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public Integer getSno() {
return sno;
}

public void setSno(Integer sno) {
this.sno = sno;
}

public String getSname() {
return sname;
}

public void setSname(String sname) {
this.sname = sname;
}

public Character getSex() {
return sex;
}

public void setSex(Character sex) {
this.sex = sex;
}

public String getAddr() {
return addr;
}

public void setAddr(String addr) {
this.addr = addr;
}

@Override
public String toString() {
return "UserPojo{" +
"sno=" + sno +
", sname='" + sname + '\'' +
", sex=" + sex +
", age=" + age +
", addr='" + addr + '\'' +
'}';
}
}

映射文件(UserDao.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">
<!-- 分类sql语句,可以自定义 -->
<mapper namespace="user">
<!--
#{} : 如果参数是pojo类型 , 可以用pojo类的属性名获得属性值.
-->
<insert id="insertUser" parameterType="com.mybatis01.pojo.UserPojo">
INSERT INTO student VALUES (#{sno},#{sname},#{sex},#{age},#{addr})
</insert>

</mapper>

junit单元测试(Test.java):

package com.mybatis01.test;

import com.mybatis01.pojo.UserPojo;
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 java.io.InputStream;

public class Test {
@org.junit.Test
public void test() throws Exception{
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = factory.openSession();

UserPojo userPojo = new UserPojo();
userPojo.setSno(108);
userPojo.setSname("薛宝钗");
userPojo.setSex(Character.valueOf('女'));
userPojo.setAge(19);
userPojo.setAddr("蘅芜苑");

int a = session.insert("user.insertUser",userPojo);
//需要提交,否则会回滚
session.commit();
System.out.println(a);
System.out.println("编号为"+userPojo.getSno()+"录入成功");

session.close();
}

}

运行结果:

向student表中插入数据:sno=108,sname=薛宝钗,sex=女,age=19,addr=蘅芜苑

查询数据库,插入成功:

 

posted on 2021-10-06 00:53  tom和mt  阅读(65)  评论(0)    收藏  举报