什么是框架?
在原生的编程API基础之上进行的进一步封装,开发人员使用起来更加方便,开发效率更高、隐藏底层复杂的过程,通常使用配置文件或注解的方式,让程序更加灵活。
框架的优点:
1.灵活可配置:将程序中写死的代码可以写到配置文件中
2.代码复用性高:将程序中反复要写死的代码进行抽取封装,提高代码的复用性
3.简化开发:框架将底层复杂的细节进行了封装,并提供了方便调用的API,使得开发人员将工作的重点转移到实际业务中,大大提高了项目的开发效率。
MyBatis简介:
MyBatis是apache的一个开源框架,是一个基于Java的持久层框架,支持普通的sql查询,存储过程和高级映射。持久层成框架包括SQL Maps(sql映射)和Data Access Object(DAO)。
持久化层:JDBC、DBUtils、Hibernate、MyBatis
MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的pojos(java对象)映射成数据库中的记录
DAO简介:数据库和实体类之间进行通讯的桥梁
Mybatis架构:
里面有一个核心配置文件SqlMapConfig.xml关联了很多的SqlMapper.xml映射配置文件,核心控制器Configuration配置文件的管理器(可以解析配置文件),配置文件完成将数据库的数据和实体类的属性进行映射
MyBatis优点:
1.将sql语句和代码剥离,代码修改sql语句不需要重新编译代码(避免了硬编码)
2.使用MyBatis自带的连接池,获得连接更加方便(且可以集成第三方连接池)
3.将查找数据库中的字段值自动设置到实体类的属性中(数据库字段名必须跟实体类中的属性名一致,若不一直则需要修改表字4段的别名)
4.因为MyBatis封装了一个查询接口SqlSession,使用SqlSession调用增删改查更方便
简单示例一:
将MyBatis的核心jar包和依赖jar包添加到libs目录下,添加mysql的驱动连接
User实体类:
package marshalMyBatis01;
public class User {
private Long user_id;
private String user_name;
private Long user_age;
public Long getUser_id() {
return user_id;
}
public void setUser_id(Long user_id) {
this.user_id = user_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public Long getUser_age() {
return user_age;
}
public void setUser_age(Long user_age) {
this.user_age = user_age;
}
}
HelloWorld类:
package marshalMyBatis01;
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;
public class HelloWorld {
public static void main(String[] args) {
InputStream in = null;
try {
//获取主配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//创建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//创建sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
/*
* 调用selectList方法
* user.findAll对应UserMapper.xml配置文件中的namespace.id
*/
List<User> selectList = sqlSession.selectList("user.findAll");
for (User user : selectList) {
System.out.println(user);
}
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
sqlMapConfig.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">
<!-- 指定类型是JDBC,mybatis创建的数据源是类型为POOLED的连接池
驱动连接,数据库名、密码 -->
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/marshal?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="marshal" />
</dataSource>
</environment>
</environments>
<!-- 在核心配置文件中将映射配置文件组装起来 -->
<mappers>
<mapper resource="UserMapper.xml" />
</mappers>
</configuration>
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:命名空间,要唯一 -->
<mapper namespace="user">
<!-- 将sql写入到配置文件中,将数据库的表字段和实体类的属性进行映射,resultType为实体类的全路径 -->
<select id="findAll" resultType="marshalMyBatis01.User">
select * from marshal_user
</select>
</mapper>
实现怎删改功能和Junit Test测试:
Junit Test
Junit Test方法之前执行需加上@Before
用来测试的方法上面必须加上@Test
方法必须是public的,方法必须时void,方法不能传参数,可以抛异常不自己捕获异常