新手学习Mybatis笔记—Mybatis配置
第一次接触Mybatis,记录自己的学习过程,首先通过查阅一些资料得到对Mybatis的以下几点理解
一、 Mybatis个人理解
- Mybatis是一种针对SQL查询映射ORM持久层框架
- 配置过程与Hibernate相类似
- Mybatis消除了繁琐的JDBC代码编码以及参数设置过程
- 相比较Hibernate,Mybatis更为轻量级。两者具体的比较,之后会记录
二、 Mybatis配置详解
1.准备Eclipse创建测试Mybatis的项目,最好是JavaWeb项目。在创建的过程中注意:
一是要创建WEB-INF下的classes文件夹(src下的源代码编译后存放在这里的字节码文件:xxxx.class等)
二是要创建WEB-INF下的web.xml文件(用于配置拦截器,过滤器以及servlet等的xml配置文件),具体如下图所示,创建过程中就可以创建两个classes文件与web.xml文件:
最后我们会看到目录下将有我们所要创建的文件及MybatisDemo的javaweb项目,这都是必须的,这只是对于菜鸟新手而言,其他的可以跳过此步。
注意:图中classes文件夹可能不会显示,这时候你可以百度怎么显示,但我记得是Project Exploer右上角倒三角下的Customize view-去掉java output folders前面的勾即可
2.准备jar包:mybatis-3.2.7.jar+mysql-connection-java-5.1.1.44-bin.jar复制到lib文件下,Libraries下自然就会多出Web App Libraries存放jar包的文件,不需要Add to build path
3.创建数据库和表,我用到的是Mysql+navicat
SQL脚本使用入如下:
create database mybatis_demo;
use mybatis_demo;
CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(10),age INT);
INSERT INTO users(NAME, age) VALUES('Zhangsan', 21);
INSERT INTO users(NAME, age) VALUES('Lisi', 22);
这里是创建好的用来简单测试数据库mybatis_demo下的表users
4.创建conf.xml文件,在src下右键new->other->xml file->创建conf.xml
复制代码覆盖xml文件,注意我使用的端口是3308,一般都是3306
<?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>
<!--一个environment代表一个环境变量,也就是一个基于JDBC的数据库连接,有多个JDBC就有多个environment -->
<environments default="development">
<environment id="development">
<!--transactionManager声明事务管理器:基于JDBC -->
<transactionManager type="JDBC" />
<!--dataSource:声明数据源,数据源的类型有NOPOOLED ,POOLED ,JIDN(开发和测试用POOLED) -->
<dataSource type="POOLED">
<!-- property:配置数据库连接JDBC的一些属性信息 -->
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3308/mybatis_demo?useSSL=true" />
<property name="username" value="root" />
<property name="password" value="1234" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mybatis/userMapper.xml"/>
</mappers>
</configuration>
注意一定要加上以下的mappers资源代码,不然会出现Cause: java.lang.IllegalArgumentException: Mapped Statements collection………错误
<mappers>
<mapper resource="com/mybatis/userMapper.xml"/>
</mappers>
5.创建实体类User:在src下创建com.mybatis包,之后创建User类:
代码如下:
package com.mybatis;
/**
* @author Lijian
*
*/
public class User {
// 这里的属性必须跟数据库中字段要一致,必须对应
private int id;
private String name;
private int age;
/*
* 这里getter/setter方法以及toString都可以自动生成
*/
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
6.创建映射文件userMapper.xml,一开始学习阶段跟实体类User在同一个包下(类似于:Hibernate中的映射文件配置)
<?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">
<!--namespace:指明userMapper映射文件的所在位置,一般都是:包名(com.mybatis)+映射文件名(userMapper) -->
<mapper namespace="com.mybatis.userMapper">
<!--
1.parameterType属性指明查询时用到的参数类型:即id字段的类型
2.resultType属性指明查询返回的结果集类型:即返回一个User实体对象
3.resultType="com.mybatis.User"就表示将查询结果封装成一个User类的对象返回
4.在select标签中可以写SQL查询语句select * from users where id=#{id}
-->
<select id="getUser" parameterType="int" resultType="com.mybatis.User">
select * from users where id=#{id}
</select>
</mapper>
7.创建TestDemo
package com.mybatis;
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;
public class TestDemo {
public static void main(String[] args) throws IOException {
String resource = "conf.xml";
//使用类加载器getClassLoader()加载mybatis的配置文件
InputStream in = TestDemo.class.getClassLoader().getResourceAsStream(resource);
//创建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
//从sessionFactory里打开一个会话连接,即连接一个数据库
SqlSession session = sessionFactory.openSession();
/*
* 映射sql的标识字符串statement:
* com.mybatis.userMapper是mapper映射文件中唯一的标识符namespace
* selectById是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL语句
*/
String statement = "com.mybatis.userMapper.selectById";
//执行查询返回数据库第1条记录 :也可以使用selectList
User user=session.selectOne(statement,1);
System.out.println(user);
//执行查询返回数据库第2条记录
User user2=session.selectOne(statement,2);
System.out.println(user2);
}
}
接下来运行TestDemo->Run as->Java Application