在java web工程中对于数据库的操作基本都是通过mybatis库操作的,下面就简单的介绍初步的使用过程。
首先我们建立了测试用的数据库mybatis:
create database mybatis;
use mybatis;
create table users(id int primary key auto_increment,name varchar(20),age int);
insert users(name,age) values ('句芒',100);
insert users(name,age) values ('帝江',200);
我们在这个新建的数据库中建立一个表users,然后插入两条数据。
对应的我们要在Java web工程中创建这个表对于的java类User,很多地方(主要是使用spring的时候)又叫它bean对象。这个java类的属性要与数据库中的字段对应:
package ServaceStudy;
public class User {
private int id;
private String name;
private int age;
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;
}
}
操作数据库是需要使用sql语句的,下面我们需要创建users表对应的sql语句的xml文件,userMapper.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="MyMapper.userMapper">
<select id="getUser" parameterType="int" resultType="ServaceStudy.User">
select *from users where id=#{id}
</select>
</mapper>
mapper 标签的属性namespace的值一般是包名+xml文件名,作为命名空间的值。select 标签代表基本的sql语句增删改查中的查,id用于唯一标识这个sql语句,parameterType属性代表查找时传入参数的类型,resultType代表查找结果的返回类型,select *from users where id=#{id}
这是具体的查询语句,表示根据id查询对应的那条数据。
好了到这位置我们已经创建了三个元素:数据库中的一个表,表对应的java类,表对应的mapper文件。这三个元素现在是没有关系的,我们还需要更进一步的使它们产生关联。
在工程中我们需要创建一个xml文件用于管理mybatis在工程中的使用,这个文件大概要完成这些事情:指定连接到哪个数据库,注册表对应的mapper文件:
<?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://10.1.3.121:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="MyMapper/userMapper.xml"/>
</mappers>
</configuration>
environments标签是环境的意思,这里指的是数据库连接的是生产环境还是开发环境,现在开发过程中一般都连接开发环境的,dataSource数据源标签这里会规定连接数据库的一些信息,driver这里会规定默认加载的架包路径,url设置连接数据库的地址,username和password分别是数据库的用户名和密码。
在mappers标签中会注册我们写的mapper文件如:<mapperresource="MyMapper/userMapper.xml"/>
resource 就是mapper文件的路径。
好了,到这里我们把需要做的前期工作已经完成了,下面写代码测试:
package ServaceStudy;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class TestMybatis {
public static String selectUserById(Integer id) {
InputStream input = TestMybatis.class.getClassLoader().getResourceAsStream("conf.xml");
String statement = "MyMapper.userMapper.getUser";
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(input);
SqlSession session = sessionFactory.openSession();
User user = session.selectOne(statement,id);
session.close();
return user.getName();
}
}
InputStream input = TestMybatis.class.getClassLoader().getResourceAsStream("conf.xml");
是使用类加载器加载mybatis的总的配置文件的,也可以使用其自带的类Resources类加载:Reader input = Resources.getResourceAsReader("conf.xml");
String statement = "MyMapper.userMapper.getUser";
这个是指明将要执行哪个mapper文件中的哪条sql语句。
下面获取SqlSession执行查询语句:
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(input);
SqlSession session = sessionFactory.openSession();
User user = session.selectOne(statement,id);