之前没接触过mybatis,这次公司做项目用的是mybatis连接数据库,自己回去学了后是xml配置的,但大家都说注解可能更明了一些,所以我就都总结一下。
准备工作:新建Java项目(新建web项目还是J2SE的都可以,我这边新建的是普通的Java项目),引入两个jar包:mybatis-3.4.5.jar 和 mysql-connector-java-5.1.44-bin.jar,并且add to Build Path。
介绍:
mybatis通过xml配置来连接数据库,其实主要是两个xml,第一个是数据库配置的xml,即config.xml文件,它是告诉程序,要连哪个数据库,数据库的地址用户名密码啥的都在这,数据库到时候会执行什么操作呢,这个它告诉你:我看的是哪个对应的mapper的xml文件说要干啥。那第二个xml文件当然就是我们自己配置的mapper的xml文件了,里面写我们到时候会要求数据库执行的操作。
步骤:
1.新建个文件夹,放xml这些配置文件(也可以不新建,主要是为了显得整齐点)【我的整个项目的目录结构如下:】
2.新建config.xml文件:
<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/test" />
<property name="username" value="root" />
<property name="password" value="root" />
dataSource>
environment>
environments>
<mappers>
<mapper url = "file:////Users/knight/letian-workspace/testMybatis/conf/mapper.xml" />
mappers>
configuration>
3.新建mapper.xml文件:
(这里面就是写sql语句,然后说明它的传入参数的类型,返回参数的类型,在程序中调用这个sql的时候,调用的一个标识等等)
(我这里只是实现一个查询用户名的功能)
<mapper namespace="com.knight.main.mapper">
<select id="name" parameterType="int" resultType = "String">
select name from Person where id = #{id};
select>
mapper>
4.新建HelloMybatis.java文件,开始连接mysql:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class HelloMybatis {
public static void main(String[] args) {
//mybatis的配置文件
String resource = "./conf/config.xml";
/**
* 然后把这个配置文件转成InputStream给SqlSessionFactory
*/
InputStream is = null;
try {
is = new FileInputStream(resource);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession();
/**
* 映射sql的标识字符串,
* com.knight.main.mapperr是mapper.xml文件中mapper标签的namespace属性的值,
* name是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
*/
String statement = "com.knight.main.mapper.name";//映射sql的标识字符串
//执行查询返回结果
String user = session.selectOne(statement, 3);
System.out.println(user);
}
}
我继续在这个项目里写了,然后新建个包就行:
(还是实现根据id查询用户名的功能)
注解呢,就是定义个接口,里面写好要执行的sql,然后以一个方法的方式来返回结果。
1.定义接口Mapper.java:
package com.knight.annotation;
import org.apache.ibatis.annotations.Select;
//定义sql映射的接口,使用注解指明方法要执行的SQL
public interface Mapper {
//使用@Select注解指明getName方法要执行的SQL
@Select("select name from Person where id = #{id};")
public String getName(int id);
}
2.在config.xml文件里去注册,也就是告诉程序这个接口在哪,在原先的config.xml文件的mappers标签里加上:
<mapper class = "com.knight.annotation.Mapper" />
完整的config.xml文件是:
<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/test" />
<property name="username" value="root" />
<property name="password" value="root" />
dataSource>
environment>
environments>
<mappers>
<mapper class = "com.knight.annotation.Mapper" />
mappers>
configuration>
3.编写AnnotationMybatis.java文件:
package com.knight.annotation;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class AnnotationMybatis {
public static SqlSession getSqlSession() {
String resource = "./conf/config.xml";
InputStream is = null;
try {
is = new FileInputStream(resource);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
return sessionFactory.openSession();
}
public static void main(String[] args) {
SqlSession sqlSession = getSqlSession();
//得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来
Mapper mapper = sqlSession.getMapper(Mapper.class);
//执行查询操作,将查询结果自动封装成User返回
String name = mapper.getName(3);
//使用SqlSession执行完SQL之后需要关闭SqlSession
sqlSession.close();
System.out.println(name);
}
}
其实xml配置和注解只是调用形式不一样罢了,不过注解确实看起来整齐一些。
以上两个例子是在写博客的时候,边写博客,边写例子的,所以都亲测可以运行通过。
欢迎大家交流沟通!