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

原文地址:https://www.cnblogs.com/wangqilong/p/8279756.html