下面我们搭建一下MyBaits的开发环境,也就是一个用MyBaits框架访问数据库的例子。
1、项目结构如下
这里搭建的是一个maven项目。
2、引入依赖pom.xml
4.0.0com.suibibk mybatis-test01 0.0.1-SNAPSHOTorg.mybatis mybatis 3.4.6mysql mysql-connector-java 5.1.45log4j log4j 1.2.12junit junit 4.7
这里重点是如下两个依赖
org.mybatis mybatis 3.4.6mysql mysql-connector-java 5.1.45
3、编写实体类:User
public class User{ private Long id;//自增的ID private String username;//用户名 private String userId;//这个用来存放用户的userId,不要用自增键太不安全 private String password;//用户密码 private String nickname;//昵称 private String imgUrl;//用户头像 private String sex;//用户性别0女,1是男 private String age;//用户年龄 private String create_datetime;//用户创建时间 private String update_datetime;//用户修改时间 private String type;//用户类别0是管理员,1是已登录用户,2是游客 private String remark;//用户备注 private String visible;//用户是否有效 private String value;//预留字段 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUserId() { return userId; } public void setUserId(String 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; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public String getImgUrl() { return imgUrl; } public void setImgUrl(String imgUrl) { this.imgUrl = imgUrl; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getCreate_datetime() { return create_datetime; } public void setCreate_datetime(String createDatetime) { create_datetime = createDatetime; } public String getUpdate_datetime() { return update_datetime; } public void setUpdate_datetime(String updateDatetime) { update_datetime = updateDatetime; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getVisible() { return visible; } public void setVisible(String visible) { this.visible = visible; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", userId=" + userId + ", password=" + password + ", nickname=" + nickname + ", imgUrl=" + imgUrl + ", sex=" + sex + ", age=" + age + ", create_datetime=" + create_datetime + ", update_datetime=" + update_datetime + ", type=" + type + ", remark=" + remark + ", visible=" + visible + ", value=" + value + "]"; }}
这里字段需要跟数据库的字段一模一样,否则需要在配置文件或者加上注解一一对应,这个后续再说,这里先用最简单的方式:一模一样。
4、编写持久层接口:UserMapper
public interface UserMapper { public List findAllUser();}
这里习惯性后缀用Mapper,也习惯性在mapper包下面
5、编写持久层接口映射文件:UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?> select * from user
select标签上的id对应的是接口中的方法,返回类型对应的就是接口中返回的类型(不用到List,指定domain即可),然后标签内容就是要执行的语句。mapper标签中的namespace对应的就是接口类。这里不需要强制要求UserMapper.java和UserMapper.xml的路径和命名一样。
6、编写SqlMapConfig.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
这个是MyBatis的配置文件,主要是配置了环境和mappers,环境上就是指定事务类型,数据库连接信息,当然上面的default可以定义为别的名字。不过环境那里的id要和defalut相同。mapper中的现在我们的例子是配置版,也就是指定配置文件的路径即可。其实到这里我们就应该猜到流程了。程序启动的时候肯定先加载SqlMapConfig.xml配置文件,然后创建数据库连接池。接下来根据mapper标签找到UserMapper.xml配置文件,然后解析UserMapper.xml配置文件可以找到要执行的语句以及对应的接口和返回类型,这样子就全部都起啦。
7、测试类Test
public class Test { @org.junit.Test public void test1() throws Exception { //1、读取配置文件 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2、创建SqlSessionFactory工厂 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in); //3、使用工厂生产SqlSession对象 SqlSession sqlSession = factory.openSession(); //4、使用SqlSession创建Dao接口的代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //5、使用代理对象执行方法 List user = userMapper.findAllUser(); System.out.println("user:"+user.toString()); //6、释放资源 sqlSession.close(); in.close(); }}
上面步骤应该很清晰啦,执行后输出如下结果
哈图片有点小,因为我的服务器带宽太小了,反正也不是很重要的结果。
8、使用注解版
其实使用注解版就更简单啦,但是我觉得没有配置版灵活,注解版也就是没有UserMapper.xml文件,但是要在UserMapper.java的方法加上注解,如下:
public interface UserMapper { @Select("select * from user") public List findAllUser();}
然后修改下MyBatis的配置文件SqlMapConfig.xml中的mapper指向,现在没有接口映射配置文件了就直接指向接口
然后运行程序结果一模一样,至此环境搭建成功。
总结
通过上面快速搭建MyBatis开发环境的例子我们知道,相对于原始的jdbc操作,便利了许多,我们想要操作一个表只需要编写对应的实体类和Mapper接口以及Mapper映射配置文件就可以啦。当我们使用了注解的方式后就更加简单,只需要简单的加一个Mapper接口即可。如果我们不需要实体类,那么直接返回Map也是可以的。但是呢,我们这个标签的目的并不是单单的学会MyBatis的使用,毕竟任何框架的使用其实都是很简单的,只需要看下官网例子或者百度一下即可,我们应该要研究MyBatis的实现原理,学会它的设计方法。从中提升我们的软件架构以及设计模式。