MyBatis入门
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
项目结构:
环境搭建:导入两个包,web项目直接放在lib中,费web项目导入classPath中
MyBatis的xml文件的配置,文件配置在src目录下
<?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="dev">
<environment id="dev">
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 注册student.xml映射文件-->
<mapper resource="com/wql/student.xml" />
</mappers>
</configuration>
映射文件的配置,一般配置在实体类相同的目录下
<?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="com.studentDao.ServiceDao"> <!-- dao层路径 -->
<!-- 添加 -->
<insert id="add" parameterType="com.wql.Student">
insert into
student(id,name,age,sex) values(#{id},#{name},#{age},#{sex})
</insert>
<!-- 删除 -->
<insert id="delete" parameterType="Integer">
delete from student where
id=#{id}
</insert>
<!-- 更新 -->
<insert id="update" parameterType="com.wql.Student">
update student set
name=#{name},age=#{age},sex=#{sex} where id=#{id}
</insert>
<!-- 查询单个信息 -->
<select id="findById" resultType="com.wql.Student"
parameterType="Integer">
select * from student where id=#{id}
</select>
<!-- 查询所有的信息 -->
<select id="findAll" resultType="com.wql.Student">
select * from student order by 'id'
</select>
<!-- 模糊查找 -->
<select id="findByCondition" resultType="com.wql.Student"
parameterType="com.wql.Student">
select * from student where 1=1
<if test="name!=null">
and name like '%${name}%'
</if>
</select>
</mapper>
这里有很多属性,parameterType可以理解为传入参数的属性;resultType理解为得到结果的属性
具体属性用法看:http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html
MyBatis与数据库连接
package com.myBatisUtils;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtils {
// 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
static InputStream is = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("mybaits.xml");
// 构建sqlSession的工厂
static SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(is);
/*
* 使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件); Reader reader =
* Resources.getResourceAsReader(resource); 构建sqlSession的工厂;
* SqlSessionFactory sessionFactory = new
* SqlSessionFactoryBuilder().build(reader); 创建能执行映射文件中sql的sqlSession
*/
static SqlSession s = sf.openSession();
public static SqlSession getSqlSession() {
return s;
}
}
Dao层的实现
package com.studentDaoImpl;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.myBatisUtils.MyBatisUtils;
import com.studentDao.StudentDao;
import com.wql.Student;
public class StudentDaoImpl implements StudentDao{
//配置映射文件域
String namespace="com.studentDao.ServiceDao";
//得到执行映射文件中sql的sqlSession
SqlSession sqlSession=MyBatisUtils.getSqlSession();
public void add(Student s) {
try{
sqlSession.insert(namespace+".add", s);
sqlSession.commit(); //提交事务
}catch(Exception e){
sqlSession.rollback(); //事务回滚
}finally{
sqlSession.close();
}
}
public void delete(int id) {
try{
sqlSession.delete(namespace+".delete",String.valueOf(id));
sqlSession.commit();
}catch(Exception e){
sqlSession.rollback();
}finally{
sqlSession.close();
}
}
public void update(Student s) {
try{
sqlSession.update(namespace+".update",s);
sqlSession.commit();
}catch(Exception e){
sqlSession.rollback();
}finally{
sqlSession.close();
}
}
public Student findById(int id) {
return sqlSession.selectOne(namespace+".findById",id);
}
public List<Student> findAll() {
return sqlSession.selectList(namespace+".findAll");
}
}
上面基本是完成了,可以直接去测试
关于MyBatis中的模糊查找:http://blog.csdn.net/qq_36330228/article/details/78477389
具体学习推荐文档:http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html