zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Android的数据存储
    Servlet第一天
    JavaScript高级程序设计读书笔记(3)
    Interesting Papers on Face Recognition
    Researchers Study Ear Biometrics
    IIS 发生意外错误 0x8ffe2740
    Father of fractal geometry, Benoit Mandelbrot has passed away
    Computer vision scientist David Mumford wins National Medal of Science
    Pattern Recognition Review Papers
    盒模型bug的解决方法
  • 原文地址:https://www.cnblogs.com/wangqilong/p/8279756.html
Copyright © 2011-2022 走看看