Struts2框架接触了,Spring也接触了,剩下一个就是持久层框架了。持久层有Hibernate和mybatis两种。Hibernate简要看了一下,相对来讲复杂一点,程序员用面向对象的方法操纵数据库,不能直接写sql语句是很不爽的地方。而mybatis可以直接在xml中写sql语句,这一点让我觉得mybatis更加好用。
eclipse新建一个maven工程,叫mybatisdemo。
简要说一下maven,这也是我今天接触到的。简单来讲,用maven写项目,我们就不需要在网上四处百度jar包了,直接在pom.xml文件中配置依赖即可,这简直是太方便了!而依赖我们在哪找呢?https://mvnrepository.com/
这个网站应有尽有,把依赖也就是dendencies拷下来,eclipse会自动将相应的包导进来。
项目大概结构:
首先跟往常一样,建表。我建了一个member表,字段只有id, username, password。
然后写出javabean,Member类。
package com.edu.mybatisdemo.bean;
public class Member{
private Integer id;
private String username;
private String password;
//getter setter 构造略
}
之后和jdbc一样,我们要处理数据库连接的一些操作。这里用database.properties文件,mybatis-configuration.xml文件。配置基本上是千篇一律的,网上复制一个就可以了,改一改数据库名,用户名密码就行
database.properties:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/acc?useUnicode=true&characterEncoding=utf-8
username=root
password=123456
mybatis-configuration.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>
<!-- 配置数据源信息 -->
<properties resource="database.properties"/>
<!--
获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)
-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 程序中所用到sql映射文件都在这里列出,这些映射sql都被Mybatis管理 -->
<mappers>
<mapper resource="com/edu/mybatisdemo/mapper/MemberMapper.xml" />
</mappers>
</configuration>
这几步做完,可以说我们的数据库已经可以顺利连接了。接下来,我们就来设计增删改查方法就可以了。
这里我们采用面向接口编程的思想,用一个接口设计相应的方法:
MemberMapper接口:
package com.edu.mybatisdemo.mapper;
import com.edu.mybatisdemo.bean.Member;
public interface MemberMapper {
//插入一个成员
public void addMember(Member member);
//根据id,得到一个Member
public Member getMember(int id);
}
设计好了之后要实现呀。那么我们这里不用类去实现,我们用xml配置来实现。
MemberMapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 还得写一个MemberMapper -->
<!-- namespace指定对应的接口 -->
<mapper namespace="com.edu.mybatisdemo.mapper.MemberMapper">
<!--
id表示实现的方法名,必须要与接口中定义的方法一一对应
keyProperty表示插入语句的主键是id属性
useGeneratedKeys=true表示自动生成主键的值,跟我们以前jdbc写sql是一样的
-->
<insert id="addMember" keyProperty="id" useGeneratedKeys="true">
<!--
insert标签没有参数类型,所以默认是传入一个bean参数,
#{username} 表示取参数bean的username属性
#{password} 表示取bean的password属性
-->
insert into member (username, password) values(#{username}, #{password})
</insert>
<!-- getMember的映射 -->
<!--
parameterType指定参数类型,这里是int,
resultType指定返回值类型,这里是Member类型的。
说明该方法是根据id来返回一个Member对象
sql语句和我们jdbc的sql语句几乎没什么区别
-->
<select id="getMember" parameterType="int" resultType="com.edu.mybatisdemo.bean.Member">
select * from member where id = #{id}
</select>
</mapper>
万事具备,只欠测试,我们在test中进行测试:
我这里直接用一个main方法测试了:
public static void main(String [] args) {
//加载我们的mybatis配置文件
String resource = "mybatis-configuration.xml";
try {
//主要目的:得到session对象
InputStream ins = Resources.getResourceAsStream(resource);
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(ins);
SqlSession session = sessionFactory.openSession();
Member member = session.selectOne("com.edu.mybatisdemo.mapper.MemberMapper.getMember",1);
System.out.println("用户id:"+member.getId()+"\t用户名称:"+member.getUsername());
} catch (IOException e) {
System.out.println("testMember方法中");
e.printStackTrace();
}
}
测试代码看起来很多,其实前面很多操作就只有一个目的,得到session对象,然后利用session对象来处理我们的MemberMapper.xml中的配置。这里跟Hibernate有点像,都是要获得session对象。
真正做项目的时候,可以把这一块获取session的代码封装起来。
我们最终会获取id = 1的那个member对象,并将它的详细信息输出:
至此,我们就成功完成了一个mybatis程序了。