作为一个Java程序员,在不同的公司会用到不同的框架,而这次,我用到的是Mybatis持久框架,关于Mybatis的介绍,大家可以百度一下,你就知道,我就不罗嗦了。本实例也是从其他大神那里实践过来的,记录只是因为自己实践了,加深印象,在以后可以再回来学习,同时将遇到的问题一并摘录。
本篇为入门篇。
Mybatis跟Hibernate一样,都是orm持久框架,只是,Mybatis使用原生的sql。下面来搭建入门环境吧。
本文使用的数据库为mysql。所以首先是建库建表,语句如下:
建库:
+----------+------------------------------------------------------------------+ | Database | Create Database | +----------+------------------------------------------------------------------+ | mybatis | CREATE DATABASE `mybatis` /*!40100 DEFAULT CHARACTER SET utf8 */ | +----------+------------------------------------------------------------------+
建表:
mysql> create table t_user( -> id int not null auto_increment, -> name varchar(20) default null, -> pass varchar(20) default null, -> primary key(id) -> )engine=InnoDB auto_increment = 1 default charset=utf8;
添加一条记录:
mysql> insert into t_user(name,pass) values('lilei','lilei');
然后在MyEclipse中新建一个Web项目,整体结构如下:
好,然后给出项目中的文件及配置内容。
首先建立表对应的实体类User.java:
package cn.clear.domain; public class User { private int id; private String name; private String pass; 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 getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } }
建立Mybatis的配置文件mybatis-config.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://127.0.0.1:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!-- User的映射文件 --> <mappers> <!-- <mapper resource="cn/clear/domain/UserMapper.xml"/> -->
<!--在运行项目的时候要将映射文件的注释打开,我之所以这里要注释起来,
是因为之前忘记将映射文件配置在配置文件中,导致运行报了一个错误,那个错误会在后面给出--> </mappers> </configuration>
建立实体类与数据表之间的映射文件:UserMapper.xml。注意此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="User">
<!--顾名思义,根据id和下面的sql语句可以清楚这是根据主键id查询一条记录--> <select id="selectUserById" parameterType="int" resultType="cn.clear.domain.User"> select * from t_user where id = #{id} </select> </mapper>
最后建立一个测试类TestUser.java,测试环境是否成功,看看能否查询出我们在数据库中插入的记录。
package cn.clear.test; import java.io.File; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import cn.clear.domain.User; public class TestUser { public static String resource = "mybatis-config.xml"; public static void main(String[] args) throws IOException { InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sessionFactory.openSession(); try{ User user = session.selectOne("User.selectUserById",1); System.out.println(user.getName()); }finally{ session.close(); } } }
然后运行main方法,如果你上面的映射文件没有添加到配置文件mybatis-config.xml中那么将报以下错误:
Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for User.selectUserById
### Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for User.selectUserById
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:26)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:111)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:66)
at cn.clear.test.TestUser.main(TestUser.java:24)
Caused by: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for User.selectUserById
at org.apache.ibatis.session.Configuration$StrictMap.get(Configuration.java:797)
at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:631)
at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:624)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:107)
... 3 more
当你将映射文件都配置好,那么运行run方法将会见证到奇迹Console将会打印出我们想要的结果:
lilei
至此,恭喜,你已经成功入门Mybatis框架。