参照 《深入浅出Mybatis技术原理与实战——杨开振》,代码:https://github.com/yangyang5214/mybatis
mybatis 文档:http://www.mybatis.org/mybatis-3/zh/index.html
mybatis组件
1、SqlSessionFactoryBuild(构造器):根据配置信息或者代码来生成SqlSessionFactory
2、SqlSessionFactory:依靠工厂来生成SqlSession(回话)
3、SqlSession:一个既可以发送sql去执行并返回结果,也可以获取Mapper的接口
4、Sql mapper: 一个由Java接口和Xml文件(或注解)构成的,需要给出对应的SQL和映射规则。它负责发sql去执行,并返回结果。
SqlSessionFactoryUtil类:获取sqlSession
public class SqlSessionFactoryUtil {
private static SqlSessionFactory sqlSessionFactory = null;
private static final Class CLASS_LOCK = SqlSessionFactoryUtil.class;
public SqlSessionFactoryUtil() {
}
/**
* 构建sqlSessionFactory
* @return
*/
public static SqlSessionFactory initSqlSessionFactory(){
String resourse = "mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resourse);
} catch (IOException e) {
e.printStackTrace();
}
synchronized (CLASS_LOCK){
if (sqlSessionFactory == null){
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
}
return sqlSessionFactory;
}
/**
* 打开sqlsession
* @return
*/
public static SqlSession openSqlSession(){
if (sqlSessionFactory == null){
initSqlSessionFactory();
}
return sqlSessionFactory.openSession();
}
}
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>
<!--别名-->
<typeAliases>
<typeAlias alias="userDto" type="com.papa.dto.UserDto"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="autoCommit" value="false"/>
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/user.xml"/>
</mappers>
</configuration>
user.xml
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.papa.mapper.UserMapper">
<select id="getUser" resultType="userDto">
SELECT
u.age,
u.pwd,
u.username
FROM user u
WHERE u.id = #{userId}
</select>
<insert id="insertUser" parameterType="userDto">
INSERT INTO
user (age, pwd, username)
VALUES
(#{age}, #{pwd}, #{username})
</insert>
</mapper>
UserMapper 接口
public interface UserMapper {
UserDto getUser(long userId);
int insertUser(UserDto userDto);
}
userService 调用实现
public class UserService {
public static void main(String[] args) {
SqlSession sqlSession = null;
sqlSession = SqlSessionFactoryUtil.openSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
UserDto userDto = userMapper.getUser(1);
UserDto insertUser = new UserDto();
insertUser.setUsername("123");
insertUser.setPwd("123");
insertUser.setAge(12);
userMapper.insertUser(insertUser);
sqlSession.commit();
System.out.println(userDto);
}
}
项目结构图和结果: