目录
1、Myba是一款优秀的持久层框架
2、MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程,减少了代码的冗余,减少程序员的操作。
3、Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatement、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
4、MyBatis原来是apache的一个开源项目,叫做ibatis,2010年这个项目由apache迁移到了google code,并且改名为MyBatis
5、2013年11月官方代码迁移到GitHub
持久化是将程序数据在持久状态和瞬时状态间转换的机制。(理解一下这个持久状态转化为瞬时状态,持久化是mybatis最重要的特性)
即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。
JDBC就是一种持久化机制。文件IO也是一种持久化机制。
?
- 内存断点后数据会丢失,但是有些业务不允许这种情况的存在
- 比起硬盘,内存过于昂贵,如果有够量的内存,则不需要持久化服务,但是正是因为内存太贵,储存有限,因此需要持久化来缓存
1、Mybatis就是帮助程序员将数据存取到数据库里面。
2、传统的jdbc操作 , 有很多重复代码块 .比如 : 数据取出时的封装 , 数据库的建立连接等等… , 通过框架可以减少重复代码,提高开发效率 .3、MyBatis 是一个半自动化的ORM框架 (Object Relationship Mapping) -->对象关系映射
所有的事情,不用Mybatis依旧可以做到,只是用了它,会更加方便更加简单,开发更快速。
?
本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件就可以了,易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
mybatis不会对应用程序或者数据库的现有设计强加任何影响。sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
加入mybatis核心包、依赖包、数据驱动包
(mybatis默认使用log4j作为输出日志信息。)
在src也就是根目录下创建config目录(source folder类型)log4j.properties如下:
把下面的复制到log4j.properties里面就行了
# Global logging configuration
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
也是在src下创建SqlMapConfig.xml文件(SqlMapConfig.xml是mybatis核心配置文件,上边文件的配置内容为数据源、事务管理)
?将以下代码复制到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>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理-->
<transactionManager type="JDBC" />
<!-- 数据库连接池-->
<dataSource type="POOLED">
//数据库驱动
<property name="driver" value="com.mysql.jdbc.Driver" />
//数据库地址
<property name="url" value="jdbc:mysql://localhost:3306/db_test?characterEncoding=utf-8" />
//数据库用户名
<property name="username" value="root" />
//数据库密码
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
</configuration>
可以在src下直接创建也可以创建一个包再创建
public class Student {
private int id;
private String studentName;
private String gender;
private String address;
private String email;
private String remark;
public Student() {
}
public Student( String studentName, String gender, String address, String email, String remark) {
this.studentName = studentName;
this.gender = gender;
this.address = address;
this.email = email;
this.remark = remark;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
但是也要有一个地方要注意,创建成员变量时要注意和数据库的各个数据要对上,数量和名称都要一样
5、创建映射文件
还是在src下直接创建Student.xml(?这个映射文件名最好也和上面那个类名相同,我的是Student.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="test">
</mapper>
创建之后,我们要将Student.xml添加在SqlMapConfig.xml之中,因为mybatis框架需要加载映射文件
<mappers>
//resource的属性值为你xml文件的项目中的路径
<mapper resource="sqlmap/Student.xml"/>
</mappers>
<select id="findStudentById" parameterType="int" resultType="com.xinhua.domain.Student">
select * from student where id = #{id}
</select>
resultType的属性值为你类在项目中的路径,右键找到copy reference
public class TestDemo {
SqlSessionFactory ssf = null;
@Before
public void creatFactory(){
InputStream input = null;
try {
input = Resources.getResourceAsStream("SqlMapConfig.xml");
} catch (IOException e) {
e.printStackTrace();
}
ssf = new SqlSessionFactoryBuilder().build(input);
}
/** 通过id查找*/
@Test
public void testFindStudentById(){
SqlSession session =ssf.openSession();
Student student = session.selectOne("test.findStudentById", 1);
System.out.println(student.getId()+","+student.getStudentName()+","+student.getAddress());
}
到这就完成了,家人们去试一试吧