什么是mybatis?
了解mybatis之前,要先讲几个简单的概念:
ORM(Object-Relationship-Mapping):是对象关系映射的意思,它是一种思想,是指将数据库中的每一行数据用对象的形式表现出来。
JPA(Java-Persistence-API):是Java持久化接口的意思,它是JavaEE关于ORM思想的一套标准接口,仅仅是一套接口,不是具体的实现。
MyBatis概念:
是一个实现JPA规范的用来连接数据库并对其进行CRUD的开源框架(和传统的JDBC一样,就是一个用来连接数据库的组件)。Mybatis的底层就是JDBC封装的组件。
MyBatis是一个基于SQL开发的半ORM组件,只能算假把式。
Hibernate才是一个完完全全的ORM组件,安全基于对象来操作数据库中的记录。
MyBatis的优点:
1.简单易学,容易上手,基于SQL开发(相对于Hibernate)
2.提供第三插件(分页插件/逆向工程)
3.消除了JDBC大量冗余的代码,不需要手动开关连接
4.能够和spring很好的集成
MyBatis的搭建:
1.pom.xml文件内添加依赖:
mybatis-3.4.1.jar mysql-connector-java-5.1.24.jar(修改为自身的数据库版本) druid-1.1.5.jar(阿里的数据库连接池)
2.resource内配置文件:
-
jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/test jdbc.username=root jdbc.password=123
-
UserMapper.xml(在该mapper文件内编写SQL语句)
<?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就是个命名空间,与struts2的namespace类似 是为了避免与其他mapper.xml的句柄id发生重复 --> <mapper namespace="user"> <!-- 查询所有用户列表的statement 因为开启了驼峰命名,所以不需要在每个字段后面加别名就可以直接把符合规则的字段映射到对应实体类的属性上 resultType为返回的类型名,因为在mybatis-cfg.xml中配置了别名,所以这里可以直接写user --> <select id="listUser" resultType="user"> SELECT USER_ID, USER_NAME, PASSWORD FROM USER </select> </mapper>
- mybatis-cfg.xml(mybatis主配置文件)
<?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 resource="jdbc.properties"></properties> <!-- 开启驼峰命名,把符合数据库命名规范的字段(USER_NAME,单词之间带下划线)直接映射到 与JAVA命名规范(驼峰命名法)相匹配的字段上,如果不开启这个选项,就需要在select语句 的每个字段后面添加与实体类的属性名相同的别名以此来完成映射。 --> <settings> <setting name="mapUnderscoreToCamelCase" value="true" /> </settings> <!-- 为JAVA类型起别名 --> <typeAliases> <!-- 为单个类起别名,type为全限定性类名,也可以用package为包下的类批量起别名 --> <typeAlias type="com.lyu.mybatiscsdn.entity.User" alias="user"/> <!-- 为整个包下的类批量起别名,别名为类名(大小写随意,例:User类的别名可以是uSeR,User,user...) --> <!-- <package name="com.lyu.mybatiscsdn.entity"/> --> </typeAliases> <!-- 配置环境 --> <environments default="development"> <environment id="development"> <!-- 事务管理方式 --> <transactionManager type="JDBC" /> <!-- 数据源采用连接池的方式 --> <dataSource type="POOLED"> <!-- 用EL表达式的语法取jdbc.properties配置文件中的键对应的值 --> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> <!-- 加载mapper映射文件 --> <mappers> <!-- 放在根目录下 --> <mapper resource="UserMapper.xml"/> </mappers> </configuration>
MyBatis测试demo
User.java(实体类):
package com.lyu.mybatiscsdn.entity; import java.io.Serializable; public class User implements Serializable { private static final long serialVersionUID = -8433731482837977839L; private Long userId; private String userName; private String password; public Long getUserId() { return userId; } public void setUserId(Long userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
UserTest.java(测试类):
package com.lyu.mybatiscsdn.entity; 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.Before; import org.junit.Test; public class MyBatisTest { SqlSessionFactory sqlSessionFactory; @Before public void init() throws IOException { // 配置文件的名称 String configFile = "mybatis-cfg.xml"; // 通过类加载器获取输入字节流 InputStream is = Resources.getResourceAsStream(configFile); // 通过SqlSessionFactoryBuilder创建SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); } // 测试查询所用用户列表 @Test public void testListUser() { // 创建SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); // 声明sql句柄 String listSql = "user.listUser"; // 查询用户列表 List<User> userList = sqlSession.selectList(listSql); for (User user : userList) { System.out.println("用户ID:" + user.getUserId()); System.out.println("用户姓名:" + user.getUserName()); System.out.println("用户密码:" + user.getPassword()); System.out.println(); } // 关闭sqlSession sqlSession.close(); } }
pom.xml 文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lyu</groupId>
<artifactId>mybatis-csdn</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.24</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
转载自原文:https://blog.csdn.net/a909301740/article/details/78698682