1.1什么是框架
软件的半成品,解决了软件开发过程中的普适性问题,从而简化了开发步骤,提供了开发的效率。
1.2什么是ORM框架
-
ORM(Object Relational Mapping)对象关系映射,将程序中的一个对象与表中的一行数据一一对应。
1.3 使用JDBC完成ORM的缺点
-
存在大量的冗余代码。
-
手工创建 Connection、Statement 等。
-
手工将结果集封装成实体对象。
-
查询效率低,没有对数据访问进行过优化(Not Cache)。
2.1 mybatis的使用
2.1.1 导入依赖
<?xml version="1.0" encoding="UTF-8"?>
<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.qf</groupId>
<artifactId>hello-mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<!--依赖-->
<dependencies>
<!--MyBatis核心依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--MySql驱动依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
</project>
2.1.2 创建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">
<!--MyBatis配置-->
<configuration>
<!--JDBC环境配置、选中默认环境-->
<environments default="MySqlDB">
<!--MySql数据库环境配置-->
<environment id="MySqlDB">
<!--事务管理-->
<transactionManager type="JDBC"/>
<!--连接池-->
<dataSource type="org.apache.ibatis.datasource.pooled.PooledDataSourceFactory">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!-- &转义& -->
<property name="url" value="jdbc:mysql://localhost:3306/x?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="xxx"/>
<property name="password" value="xxx"/>
</dataSource>
</environment>
</environments>
<!--Mapper注册-->
<mappers>
<!--注册Mapper文件的所在位置-->
<mapper resource="xxxMapper.xml"/>
</mappers>
</configuration>
2.1.3 建表
create table t_users(
id int primary key auto_increment,
name varchar(50),
password varchar(50),
sex varchar(1),
birthday datetime,
registTime datetime
)default charset = utf8;
2.1.4 定义实体类
public class Emp {
private Integer id;
private String name;
private Integer salary;
private Integer age;
public Emp() {
}
public Emp(Integer id, String name, Integer salary, Integer age) {
this.id = id;
this.name = name;
this.salary = salary;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getSalary() {
return salary;
}
public void setSalary(Integer salary) {
this.salary = salary;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Emp{" +
"id=" + id +
", name='" + name + '\'' +
", salary=" + salary +
", age=" + age +
'}';
}
}
2.1.5 定义Dao接口
public interface EmpDao {
List<Emp> getAll();
Emp getOne(Integer id);
Integer add(Emp emp);
Integer update(Emp emp);
Integer delete(Integer id);
// Emp selectByNameAndId(String name,Integer id);
List<Emp> selectByNameAndId(@Param("name") String name,@Param("id") Integer id);
List<Emp> selectByMapForNameAndId(Map map);
List<Emp> selectLikeName(String name);
}
2.1.6 Mapper.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.hrp.dao.EmpDao">
<select id="getAll" resultType="com.hrp.entity.Emp">
select * from emp
</select>
<select id="getOne" resultType="com.hrp.entity.Emp" parameterType="integer">
select * from emp where id = #{id}
</select>
<insert id="add" parameterType="com.hrp.entity.Emp">
insert into emp values (#{id},#{name},#{salary},#{age})
</insert>
<delete id="delete" parameterType="com.hrp.entity.Emp">
delete from emp where id =#{id}
</delete>
<update id="update" parameterType="com.hrp.entity.Emp">
update emp set name=#{name},salary=#{salary},age=#{age} where id=#{id}
</update>
<select id="selectByNameAndId" resultType="Emp">
select * from emp where name =#{name} and id=#{id}
</select>
<select id="selectByMapForNameAndId" resultType="Emp">
select * from emp where name =#{key1} and id=#{key2}
</select>
<select id="selectLikeName" resultType="Emp">
select * from emp where name like concat('%',#{name},'%')
</select>
</mapper>
注意:mapper.xml默认建议存放在resources中,路径不能以/开头
2.1.7 注册Mapper
<mappers>
<!--
完善映射文件所在的路径
1.mapper接口所在的包和映射文件所在的路径/包一致
2.mapper接口的名字与映射文件的名字要一致
如:<package name="com.hrp.mapper"/>
-->
<mapper resource="mappers/EmpMapper.xml"/>
</mappers>
2.1.8 测试
public class MapperTest {
EmpDao empDao = null;
SqlSession sqlSession = null;
@Before
public void before() throws IOException {
String config="mybatis_plus.xml";
InputStream inputStream = Resources.getResourceAsStream(config);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
sqlSession = sqlSessionFactory.openSession();
empDao = sqlSession.getMapper(EmpDao.class);
}
@Test
public void getAll(){
List<Emp> all = empDao.getAll();
System.out.println(all);
}
@Test
public void getOne(){
Emp one = empDao.getOne(19);
System.out.println(one);
}
@Test
public void add(){
Emp emp = new Emp(7,"钵钵鸡",8888,21);
Integer add = empDao.add(emp);
sqlSession.commit();
System.out.println(add);
}
@Test
public void update(){
Emp emp = new Emp(7,"呱呱",1234,20);
Integer update = empDao.update(emp);
sqlSession.commit();
System.out.println(update);
}
@Test
public void delete(){
Integer delete = empDao.delete(17);
sqlSession.commit();
System.out.println(delete);
}
@Test
public void selectByNameAndId(){
List<Emp> emps = empDao.selectByNameAndId("苏打水", 21);
System.out.println(emps);
}
@Test
public void selectByMapForNameAndId(){
HashMap<String,Object> map = new HashMap<>();
map.put("key1","苏打水");
map.put("key2",21);
List<Emp> emps = empDao.selectByMapForNameAndId(map);
System.out.println(emps);
}
@Test
public void selectLikeName(){
List<Emp> emps = empDao.selectLikeName("苏");
System.out.println(emps);
}
}