Mybatis-XML-入门示例
Posted bky-lxm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis-XML-入门示例相关的知识,希望对你有一定的参考价值。
1.1. 配置流程说明
--获得数据库连接
第一步:导入包(任何框架需要的事情)
第二步:创建总配置文件,文件名随便写
第三步:创建一个MybatisUtils工具类,(获得操作对象)
--需求:插入数据到数据库
第四步:创建一个映射接口
第五步:创建一个映射文件
第六步:在总配置文件加载映射文件。
第七步:编写测试插入数据代码
1.2. 配置步骤
1.2.1. 第一步:导入包
1.2.2. 第二步:创建一个Mybatis的总配置文件
--提示:配置文件对参数理解要够深,必须先在代码里面找到对应的代码,在看文档--
--任何框架,只有有XML的,它必定会提供规则文件(DTD and schema)!!!
-注意:Mybatis的DTD的Public ID没有写在DTD文件里面,可以在官方文档里面找到
--以后,任何框架如果没有在DTD文件提供Public Id 的都去找官方文档。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd" > <configuration> <!--environments标签用于配置数据库连接信息,可以配置多个数据库的连接信息 default属性:环境集里面可以配置多个数据库连接环境,但是必须要指定默认的环境,指定的是环境environment标签的ID --> <environments default="sms"> <!-- environment环境标签 ,用于配置一个数据库连接的信息--> <environment id="sms"> <!-- 指定使用的事务类型 --> <!-- 观点:任何框架的内置属性都可以在代码里面找到 --> <!-- 大部分配置文件的解释类都是在configuration、builder这个两个单词或者单词的缩写的包里面 在org.apache.ibatis.session.Configuration配置类里面找到对应的代码查看 JDBC : 使用JDBC的事务处理 MANAGER: 不需要事务处理 --> <transactionManager type="JDBC"></transactionManager> <!-- dataSource标签:作用,配置数据库连续信息 type:配置数据源的类型 JNDI :使用JNDI数据源,就是在web服务器配置数据源,让程序调用 POOLED : 使用默认内置的连接池 UNPOOLED:使用直连数据库,不需要连接池 --> <dataSource type="POOLED"> <!-- 配置四要素 --> <property name="driver" value="org.gjt.mm.mysql.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/sms" /> <property name="username" value="root" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <!-- 配置指定加载的映射文件 --> <mappers> <mapper resource="cn/gzsxt/mapper/xml/StudentMapper.xml"/> </mappers> </configuration>
|
1.2.3. 第三步:创建一个MybatisUtils 获得Session
package cn.lxm.utils;
import java.io.IOException; import java.io.Reader;
import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisUtils {
// 注意:基于如果出现多个会话工厂,可能导致事务不同步的问题,所以我们一个项目只使用一个会话工厂 public static final SqlSessionFactory SSF = createSqlSessionFactory(); // 需求:实现同一条线程,使用的session是相同的。线程绑定, // 创建一个线程绑定变量,将变量放在该对象里面,表示对象同一条线程共享 private static final ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
// 1.获得会话工厂 private static SqlSessionFactory createSqlSessionFactory() { try { // 1.返回一个Reader对象 Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory sessionFactory = builder.build(reader); return sessionFactory;
} catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }
// 2.获得操作对象,SqlSession对象
public static SqlSession getSqlSession() { //1.判断线程变量里面是否已经有值 if (threadLocal.get() == null) { //2.如果没有值,那么创建一个session对象设置在线程变量里面 SqlSession session = SSF.openSession(); threadLocal.set(session); } //3.返回线程变量里面的session对象 return threadLocal.get(); }
public static void main(String[] args) { //同一条线程。对象一样 //注意事项:如果对象是一个静态的属性的碎屑,意味着,整个系统共用一个对象 //如果放在ThreadLocal对象里面,仅仅是当前线程共用该对象 System.out.println(MybatisUtils.getSqlSession()); System.out.println(MybatisUtils.getSqlSession()); }
}
|
--创建SqlSession的对象是否成功
public static void main(String[] args) { System.out.println(DbUtils.getSession()); }
|
5.结果
1.2.4. 第四步:创建实体类
package cn.lxm.pojo;
public class Student {
private String stuId;//BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT ‘学生编号‘, private String stuName;//VARCHAR(50) NULL DEFAULT NULL COMMENT ‘学生名字‘, private String stuAge;//INT(11) NULL DEFAULT NULL COMMENT ‘学生年龄‘, private String stuPassword;//VARCHAR(50) NULL DEFAULT NULL COMMENT ‘密码‘, public String getStuId() { return stuId; } public void setStuId(String stuId) { this.stuId = stuId; } public String getStuName() { return stuName; } public void setStuName(String stuName) { this.stuName = stuName; } public String getStuAge() { return stuAge; } public void setStuAge(String stuAge) { this.stuAge = stuAge; } public String getStuPassword() { return stuPassword; } public void setStuPassword(String stuPassword) { this.stuPassword = stuPassword; }
}
|
1.2.5. 第五步:创建一个操作接口
package cn.lxm.mapper;
import cn.lxm.pojo.Student;
public interface StudentMapper {
//需求:实现插入数据到student表 //注意:如果是增删改操作,返回的类型必须是int类型 //返回的是操作影响的行数。 int insert(Student student);
} |
1.2.6. 第六步:创建映射文件,StudentMapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" > <!-- 注意事项:使用映射接口的配置方式,namespace必须指向接口的类全名 --> <mapper namespace="cn.lxm.mapper.StudentMapper">
<!-- useGeneratedKeys:作用打开支持ID回填,设置为true keyColumn:设置ID回填,ID对象数据库的字段名 keyProperty:设置ID回填到JavaBean对应的属性名
--> <insert id="insert" useGeneratedKeys="true" keyColumn="stu_id" keyProperty="stuId" > <!-- 注意:如果传递过来的屙屎一个JavaBean对象,那么设置的属性名为,set方法对应的属性名。如:setStuName 对应的是 stuName
--> INSERT INTO tb_student (stu_name, stu_age, stu_password) VALUES (#{stuName}, #{stuAge}, #{stuPassword}) </insert>
</mapper>
|
1.2.7. 第七步:总配置文件设置加载映射文件
<!-- 加载映射文件 --> <mappers> <mapper resource="cn/lxm/mapper/xml/StudentMapper.xml"/> </mappers>
|
1.2.8. 第八步:测试代码
package cn.lxm.test;
import org.apache.ibatis.session.SqlSession; import org.junit.Test;
import cn.lxm.mapper.StudentMapper; import cn.lxm.pojo.Student; import cn.lxm.utils.MybatisUtils;
public class StudentMapperTest {
@Test public void insert(){ //1.获得操作对象,session SqlSession session = MybatisUtils.getSqlSession(); //2.获得操作接口的动态对象 StudentMapper studentMapper = session.getMapper(StudentMapper.class); Student student=new Student(); student.setStuName("陈七"); //3.插入对象 int count = studentMapper.insert(student); //4.提交事务 session.commit(); //5.关闭 session.close(); System.out.println("返回值:"+count); //需求:实现ID回填,就是插入数据后要将数据库的ID设置在实体类对象里面 System.out.println("ID:"+student.getStuId()); }
}
|
以上是关于Mybatis-XML-入门示例的主要内容,如果未能解决你的问题,请参考以下文章