Mybatis使用说明
1-什么时mybatis
mybatis可以与数据库交换,它里面附带了对sql语句的友好书写,更加直观的管理数据库,和与service交换信息
2-配置mybatis
- 配置mybatis首先需要将mybatis的jar包导入到项目当中
- 创建一个
mybatisconfig.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.cj.jdbc.Driver"/>
<!-- 这里是需要写自己的端口和数据库名-->
<property name="url" value="jdbc:mysql://localhost:3306/javaweb?useUnicode=true&characterEncoding=utf8"/>
<!--你自己的用户名和密码-->
<property name="username" value="root"/>
<property name="password" value="lisuo"/>
<!--最大链接数-->
<property name="poolMaximumActiveConnections" value="20"/>
<!-- 空闲等待人数-->
<property name="poolMaximumIdleConnections" value="2"/>
<!-- 连接时长-->
<property name="poolMaximumCheckoutTime" value="300000"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 这里必须将自己定义的mapper位置说明-->
<mapper resource="com/snow/mapper/UserMapper.xml"/>
</mappers>
</configuration>
-
创建一个MybatisUtil类,用来获取SqlSession(这个是用来管理事务的,回归,提交)
- SqlSession是由SqlSessionFactory生成出来的
- SqlSessionFactory是由SqlSessionFactoryBuilder构建的
/**
*这个类是用来获取Session
*/
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
public static SqlSession getSqlSession(){
try {
if (sqlSessionFactory == null) {
String rs = "mybais-config.xml";
Reader reader = Resources.getResourceAsReader(rs);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
}
return sqlSessionFactory.openSession();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
- 创建Mapper接口(自定义名,建议见名知意,例:UserMapper),主要写访问数据库的方法
- 创建与Mapper接口相对应的
Mapper.xml
文件(文件名建议与Mapper对应,例:UserMapper.xml)- 注意事项:注意DOCTYPE后面跟mapper
- 注意事项2:DOCTYPE最后面是
mybatis-3-mapper.dtd
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC
"-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.snow.mapper.UserMapper">
<!-- 将实体类放入tpye中-->
<resultMap id="userMap" type="com.snow.modle.UserModle">
<!-- 表的主键-->
<id property="userId" column="user_id"/>
<result property="userName" column="user_sex"/>
<!--这是外键-->
<association property="" resultMap=""></association>
</resultMap>
<!--查询所有,id为Mapper接口中的方法名,id为Mapper接口中的方法名,id为Mapper接口中的方法名-->
<select id="getUsers" resultMap="userMap">
SELECT user_id,user_name,user_sex,user_age,user_tel,reg_date
FROM userinfo
</select>
</mapper>
-
在Service层编写对Session的访问和获取SQL执行后的结果,封装为对象返回
例如:获取用户
public List<UserModle> getUsers(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<UserModle> resultList = userMapper.getUsers();
return resultList;
}
- 在Servlet中去访问Service层,并拿到数据
总结
流程为Servlet -->Service
- 第一步:(service–调用–>mybatis获取到Session)
- 第二步:(service–访问–>Mapper-并生成一个Mapper实例)
- 第三步:(生成的Mapper实例对象调用方法,在此期间会调用Mapper.xml,并检测是否有响应方法id,有则返回SQL执行结果,无则方法调用失败)
- 至此Serive将结果返回给Servlet