mybatis 环境搭建和基本说明
Posted 穆晟铭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis 环境搭建和基本说明相关的知识,希望对你有一定的参考价值。
mybatis介绍就不多提了,直接步入正题。
先准备好eclipse和mysql,然后先看一下目录结构
文件和类很少,所以mybatis的搭建是非常简单的,如搭建中遇到问题可以先参考文档最后一部分的综合说明。
1.下载mybatis-3.2.6.jar和mysql-connector-java-5.1.8.jar两个jar包,可以到各自官网下载,里面包含了之后需要的很多jar包。
2.创建Dynamic Web project项目名MyBatis(我的项目名:mybatis),把jar包复制到WEB-INF/lib文件夹下。
3.在建立好的项目中,再创建两个Source Folder,分别为me.gacl.domain和me.gacl.mapping。
user.java
package me.gacl.domain; public class User { private int id; private String name; private String dept; private String phone; private String website; public String getWebsite() { return website; } public void setWebsite(String website) { this.website = website; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDept() { return dept; } public void setDept(String dept) { this.dept = dept; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", dept=" + dept + ", phone=" + phone + ", website=" + website + "]"; } }
userMapping.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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的 例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀) --> <mapper namespace="me.gacl.mapping.userMapper"> <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复 使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型 resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回 User类就是users表所对应的实体类 --> <!-- 根据id查询得到一个user对象 --> <select id="getUser" parameterType="int" resultType="me.gacl.domain.User"> select * from user where id=#{id} </select> </mapper>
在src文件夹下建立conf.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"> <transactionManager type="JDBC" /> <!-- 配置数据库连接信息 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/yiibai" /> <property name="username" value="root" /> <property name="password" value="" /> </dataSource> </environment> </environments> <mappers> <!-- 注册userMapper.xml文件, userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml--> <mapper resource="me/gacl/mapping/userMapper.xml"/> </mappers> </configuration>
mysql,数据表:user
DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(64) NOT NULL DEFAULT \'\', `dept` varchar(254) NOT NULL DEFAULT \'\', `website` varchar(254) DEFAULT \'\', `phone` varchar(16) NOT NULL DEFAULT \'\', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES (\'1\', \'aaa\', \'Tech\', \'http://www.aaa.com\', \'13800009988\');
建立测试文件:
包名:me.gacl.test
package me.gacl.test; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import me.gacl.domain.User; import me.gacl.domain.User2; public class Test1 { public static void main(String[] args) throws IOException { //mybatis的配置文件 String resource = "conf.xml"; //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件) InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource); //构建sqlSession的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); //使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件) //Reader reader = Resources.getResourceAsReader(resource); //构建sqlSession的工厂 //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader); //创建能执行映射文件中sql的sqlSession SqlSession session = sessionFactory.openSession(); /** * 映射sql的标识字符串, * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值, * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL */ String statement = "me.gacl.mapping.userMapper.getUser";//映射sql的标识字符串 //执行查询返回一个唯一user对象的sql User user = session.selectOne(statement, 1); System.out.println(user); } }
然后运行它。
综合说明:
到目前为止共有两个xml配置文件。mybatis-config.xml文件时mybatis的核心配置文件,里面配置了实体类别名<typeAliases>、数据库连接环境<environments>、实体类映射的xml配置文件的加载<mappers>等。User.xml配置文件是我们写sql语句的文件,与实体类一一对应,映射对应的数据库表。下图是对两个配置文件和测试代码关系的展示:
对应图中编号
1. 实体类别名。在User.xml配置文件中的resultType返回值类型是实体的时候写此别名,不配置的话,需要写bdt.model.User会很麻烦,这样一配置一劳永逸。resultType还有map等返回值类型,之后再说。
2. mappers标签配置的是需要加载哪些配置文件,不配置系统就不知道你有此User.xml配置文件。
3. 映射的命名空间,目前这个可以是随意字符串,但是在以后用接口的方式的时候就不能随便写了,目前可以随便写。
4. 要执行哪个语句,必须是唯一值,开发中会有很多增删改查语句,这个必须唯一的指定要执行哪条语句。
5. 传入语句的条件,会有很多类型,这里是int类型,#{id}方式可以获得传进来的条件参数。
6. bdt.model.User,对应实体类。
7. 另外还需要注意图中三个绿色方框内容,<typeAliases>、<environments>、<mappers>这三个的顺序是不能颠倒的,如果颠倒会报如下错误:
The content of element type "configuration" must match
"(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".
显而易见,配置文件中的标签是有顺序的,正确的顺序错误提示中已经列出来了,之后我们还要添加<properties>配置文件,自然而然必须放到<typeAliases>之前。
好的,我的mybatis已经搭建完成并测试成功了,并对基本的配置有一点了解,但是还不够,接下来会更深入的学习。
以上是关于mybatis 环境搭建和基本说明的主要内容,如果未能解决你的问题,请参考以下文章