1、首先是在Maven环境下首先在Maven的pom.xml文件中添加:
<dependencies>
<!-- 从中央仓库加载mybatis的资源 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.1</version>
</dependency>
</dependencies>
当然,可能还需要一些其他的相关资源,可以根据你自己的需求在mvnrepository中查找相关配置。
2、对其进行配置(核心)
因为在maven环境下,我们创建如下:在资源文件夹下创建mybatis.xml。
mybatis.xml的文档结构可以依照http://www.mybatis.org/mybatis-3/。
当然也可以依照以下结构:
<?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>
<!-- 引入外部配置文件 -->
<properties resource="mysqljdbc.properties"></properties>
<!-- 配置mybatis运行环境 -->
<environments default="cybatis">
<environment id="cybatis">
<!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="JDBC" />
<!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
<!-- POOLED 表示支持JDBC数据源连接池 -->
<!-- UNPOOLED 表示不支持数据源连接池 -->
<!-- JNDI 表示支持外部数据源连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!-- 这里是后面会解释 -->
<mappers>
<mapper resource="com/hxq/main/EmpMapper.xml" />
</mappers>
</configuration>
这里我是采用了properties文件来配置mysql的各项参数,有助于维护。
3、数据库相关配置
这里是配置数据库储存结果的.xml:创建EmpMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="Emp">
<!-- 自定义返回结果集 -->
<resultMap id="empMap" type="com.hxq.bean.Emp">
<id property="id" column="id" javaType="java.lang.Integer"></id>
<result property="post_type" column="post_type" javaType="java.lang.Integer"></result>
<result property="emp_name" column="emp_name" javaType="java.lang.String"></result>
<result property="emp_sex" column="emp_sex" javaType="java.lang.Integer"></result>
<result property="emp_age" column="emp_age" javaType="java.lang.Integer"></result>
<result property="emp_depart" column="emp_depart" javaType="java.lang.String"></result>
<result property="emp_year" column="emp_year" javaType="java.lang.Integer"></result>
</resultMap>
<!-- 在各种标签中的id属性必须和接口中的方法名相同 , id属性值必须是唯一的,不能够重复使用。parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型-->
<!-- useGeneratedKeys:( 仅 对 insert 有 用 ) 这 会 告 诉 MyBatis 使 用 JDBC 的getGeneratedKeys
方法来取出由数据(比如:像 MySQL 和 SQLServer 这样的数据库管理系统的自动递增字段)内部生成的主键。默认值: false。 -->
<!--keyProperty: (仅对 insert有用)标记一个属性, MyBatis 会通过 getGeneratedKeys或者通过 insert 语句的 selectKey 子元素设置它的值。默认:不设置。 -->
<!--#{}中的内容,为占位符,当参数为某个JavaBean时,表示放置该Bean对象的属性值 -->
<!-- 当你写的什么sql语句时,就什么是标签名(insert、update、delete、select、) -->
<insert id="insertEmp" useGeneratedKeys="true" keyProperty="id">
insert into employee (id,post_type,emp_name,emp_sex,emp_age,emp_depart,emp_year) values (#{id},#{post_type},#{emp_name},#{emp_sex},#{emp_age},#{emp_depart},#{emp_year})
</insert>
<update id="updateEmp" >
update employee set post_type=#{post_type},emp_name=#{emp_name},emp_sex=#{emp_sex} where id=#{id}
</update>
<delete id="deleteEmp" parameterType="int">
delete from employee where id=#{id}
</delete>
<select id="selectUserById" parameterType="int" resultMap="empMap">
select * from employee where id=#{id}
</select>
<select id="selectAllEmp" resultMap="empMap">
select * from employee
</select>
</mapper>
仔细观察几个标签的id等会可能会用到
<mapper namespace="Emp">
<select id="selectAllEmp" resultMap="empMap">
MyBatis中的SqlSession
用来操纵数据库的,先来创建吧:DBAccess.java
package com.hxq.main;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
* 访问数据库类
* @author 贺湘泉
*
*/
public class DBAccess {
public static SqlSession getSqlSession() throws IOException{
//配置文件的路径
String resource = "mybatis.xml";
//通过配置文件获取数据库连接信息
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = builder.build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
return session;
}
}
专门来获取SqlSession对象的。
4 、接下来是重头戏:
我们一般在DAO层写一些增删改查的操作,但是接下来,没错还是在DAO层进行。看完以后你在想象用myBatis有什么不同。
Bean对象我就不一一创建解释了。
直接写一个查询所有的方法吧。
/**
* 查询所有员工信息
*/
public List<Emp> selectAllUser() throws Exception {
SqlSession sqlSession = null;
sqlSession = DBAccess.getSqlSession();//获取SqlSession对象
//这里要主意了下面文章解释
List<Emp> list = sqlSession.selectList("Emp.selectAllEmp");
sqlSession.close();
return list;
}
sqlSession.selectList("Emp.selectAllEmp");
selectList();方法就是查询的咯,当有参数时,是直接跟在后面的。这是SqlSession中提供的方法。
例如:selectList("Emp.selectAllEmp",ename,id);
但是"Emp.selectAllEmp"是什么意思呢?
这端话意思就是配置EmpMapper.xml中Emp标签下selectAllEmp。就是你要执行的sql语句啦。
就完啦,详细请关注-小阿毛- 会持续更新!