myBatis01

Posted 小葱拌豆腐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了myBatis01相关的知识,希望对你有一定的参考价值。

 

1.创建对应的数据库以及需要的表

2.创建对应的java项目,引入需要的mybatis需要的jar,以及连接mysql数据库的jar!

 

3.创建对应的Student实体类

 

/**
 *学生的实体类
 */
public class Student {
    private Integer id; // 学生编号
    private String name; // 姓名
    private Integer age; // 年龄

    /**
     * 对应的有参无参构造以及对应的get和set方法
     */
    public Student() {
        super();
    }

    public Student(Integer id, String name, Integer age) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

}

 

 

 

 

4.创建对应的接口以及mapper文件

 

public interface StudentDao {
    /**
     * 新增学生信息
     */
    void addStudent(Student student);
}

 

 

<?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="student">
    <insert id="addStudent" parameterType="cn.bdqn.bean.Student">
        insert into
        student(age,name) values(#{age},#{name})
    </insert>
</mapper>

 

 

 

5.创建对应的实现类和工具类

 

public class StudentDaoImpl implements StudentDao {

    //新增学生
    @Override
    public void addStudent(Student student) {
        SqlSession session=null;
        try {
            session = MyBatisUtils.getSession();  //获取session
            /**
             * 新增操作
             * addStudent:一定要和mapper文件中 的 id一致!
             */
            session.insert("addStudent", student);
            /**
             * 需要我们手动提交事务   02. 为什么 需要 手动提交
             * 03.在底层代码中查看得出结论
             *    底层的insert 以及delete 其实都是执行了 update操作
             *    关键点在于 dirty!!!
             * 04.怎么看到了session.commit  就是transaction.commit(); 
             *     001.MyBatisUtils 的方法 openSession的时候!默认没有传递参数==>autoCommit=false
             *         需要我们手动提交事务!
             *     002.session.insert() 底层默认调用了update()
             *          就是在update(),dirty=true!  数据是脏数据!
             *     003. session.commit(); 底层 默认    transaction.commit();
             *          之后dirty=false!  因为已经同步到数据库中!不是脏数据了!
             */
            session.commit();
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            if (session!=null) {
                session.close();
            }
        }
        

    }

}

 

 

 01.所有的增删改默认调用  update

02.update方法中有 一个非常重要的属性 是  dirty ===>脏!

 为什么需要提交!  dirty!!!

 

 

 

 

/**
 *  创建会话工厂的单例
 */
public class MyBatisUtils {
    //创建本类的静态变量
    private static  SqlSessionFactory sessionFactory;
    
    //私有化构造
    private MyBatisUtils(){}
    
    //对外访问的接口
    public  static  SqlSession getSession(){
        try {
            //读取mybatis的核心配置文件
            InputStream stream = Resources.getResourceAsStream("mybatis.xml");
            if (sessionFactory==null) { //判断sessionFactory是否为空
                sessionFactory=new SqlSessionFactoryBuilder().build(stream);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        //01.这里为什么不需要关闭流?  
        return  sessionFactory.openSession();
    }

}

 

 

 

 

 

 

 

6.创建mybatis的核心配置文件和日志文件

 

<?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文件配置连接数据库的四要素 -->
    <properties resource="jdbc.properties" />
    
    
    <!-- 设置别名 两种方式 -->
    <typeAliases>
           <!--  01.这种方式别名可以随意取  但是如果有多个 类 就需要配置多个typeAlias 
           <typeAlias type="cn.bdqn.bean.Student" alias="student"/> -->
           <package name="cn.bdqn.bean"/><!-- 02.这种方式要求别名必须使用简写的类名  -->
    </typeAliases>
    
    
    <!-- 配置运行环境 可以有多个 environment -->
    <environments default="mysql"><!-- 默认采用的环境 -->
        <environment id="mysql"> <!-- 环境的名称 -->
            <!--配置事务管理 采用jdbc默认的事务管理 之后整合的时候 肯定是交给了 spring来处理了 -->
            <transactionManager type="JDBC" />
            <!-- 数据源采用的是连接池技术 POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    <!-- 加载映射文件信息 -->
    <mappers>
        <mapper resource="cn/bdqn/dao/StudentMapper.xml" />
    </mappers>
</configuration> 
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=用户名
jdbc.password=密码
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%-5p] %c %L %m %n

log4j.rootLogger=trace,console

 

 

7.创建测试类测试

public class StudentTest {

    @Test
    public void test() {
        StudentDao dao = new StudentDaoImpl();
        dao.addStudent(new Student(1, "小黑", 10));
    }
}

 

8.查看运行结果

 

以上是关于myBatis01的主要内容,如果未能解决你的问题,请参考以下文章

mybatis学习(39):动态sql片段

mybatis动态sql片段与分页,排序,传参的使用

MyBatis动态SQL标签用法

MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段

mybatis动态sql之利用sql标签抽取可重用的sql片段

[mybatis]动态sql_sql_抽取可重用的sql片段