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