• 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();
                }
            }
            
    
        }
    
    }
    View Code

     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.查看运行结果

  • 相关阅读:
    Python sys.argv用法详解及应用
    Python map() 函数
    Python中enumerate用法详解
    闭包,作用域链,垃圾回收,内存泄露
    jQuery 常用代码集锦
    关于作用域和作用域链最完整的简述
    git 合并commit
    apollo-client
    关于对称加密和解密
    接口校验机制
  • 原文地址:https://www.cnblogs.com/xtdxs/p/7094903.html
Copyright © 2020-2023  润新知