标签:使用步骤 names 技术 包名 rate 使用 isp auto date
MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。
MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。
MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
MyBatis也是ORM框架的实现,跟Hibernate一样,都是持久层的框架,只是MyBatis涉及到的SQL都需要自己写。
1、创建数据库和表
create database db_m1; use db_m1; create table tb_stu(id int auto_increment primary key,name varchar(10),age int);
2、创建数据库表对应的类
//代表的是tb_stu表 public class Student{ private int id; private String name; private int age; public int getId(){ return id; } public void setId(int id){ this.id=id; } public String getName(){ return name; } public void setName(String name){ this.name = name; } public int getAge(){ return age; } public void setAge(int age){ this.age = age; } }
3、创建Dao层接口和对应的Mapper文件
接口:
public interface StudentDao{ //保存学生对象 void save(Student stu); //修改 int update(Student stu); //删除 int delete(Student stu); //查询 List<Student> query(); }
对应的Mapper文件:
<?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”> <!—设置映射配置:接口的配置 内部就是写出接口中抽象方法所需的SQL语句 namespace:对应接口的全称 --> <mapper namespace=”cn.code404.dao.StudentDao”> <!—什么样的SQL就用什么样的标签--> <!—insert:实现插入语句的编写 常用属性: id:就是对应的方法名称 parameterType:形式参数的类型 --> <!—1、新增数据--> <insert id=”save” parameterType=”Student” keyProperty=”id”> <!—获得自增主键的值方式二--> <!--<selectKey keyProperty=”id”> select LAST_INSERT_ID() </selectKey> --> insert into tb_stu(name,age) values(#{name},#{age}) </insert> <!—2、修改数据--> <update id=”update” parameterType=”Student”> update tb_stu set name=#{name},age=#{age} where id=#{id} </update> <!—3、删除数据--> <delete id=”delete” parameterType=”Student”> delete from tb_stu where id=#{id} </delete> <!—4、查询数据--> <select id=”query” resultType=”Student”> select * from tb_stu </select> </mapper>
4、MyBatis的配置文件
该配置文件存储在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> <!—加载外界文件的配置:数据库的配置信息--> <properties resource:”dbconfig.properties”/> <!--全局设置--> <settings> <setting name=”useGeneratedKeys” value=”true”/> <settings> <!--别名,主要是为mapper文件中的参数的类型写上简称--> <typeAliases> <!--为单个的类写别名--> <!--<typeAlias alias=”Student” type=”org.qf.domain.Student”/>--> <!--为整个包设置,这样的话mapper文件使用该包的类就可以直接使用无需包名--> <package name=”cn.code404.domain”/> </typeAliases> <!--数据库的环境设置default使用哪个配置--> <environments default=”test”> <!--配置信息,id唯一标记--> <environment id=”test”> <!--配置事务管理器 type:类型 取值说明: 1、JDBC:直接使用JDBC的事务模块,设置connection开启事务,根据情况进行回滚或提交 2、MANAGED:这个值标记本身什么都不做,不会提交或回滚事务,但是可以使用容器来管理事务,默认会关闭连接,closeConnection设置为false--> <transactionManager type =”MANAGED”></transactionManger> <!--配置数据库的连接数据源 type:类型 取值说明: 1、UNPOOLED:不使用数据库连接池 2、POOLED:使用数据库连接池--> <dataSource type=”UNPOOLED”> <property name=”driver” value=”${driverclass}”/> <property name=”url” value=”${dburl}”/> <property name=”username” value=”${dbuser}”/> <property name=”password” value=”${dbpass}”/> </dataSource> <environment> </environments> <!--映射文件,就是需要MyBatis管理的接口实现类对应用的映射文件--> <mappers> <!--基于xml的实现--> <mapper resource=”cn/code404/dao/StudentDaoMapper.xml/> <!--基于注解的实现--> <!-- <mapper class=””/>--> <!--标记指定的包--> <!-- <package name=”cn.code404.dao”/> --> <mappers> </configuration>
数据库配置文件dbconfig.properties:
driverclass=com.mysql.jdbc.Driver
dburl=jdbc:mysql://localhost:3306/db_m1?characterEncoding=utf-8
dbuser=lx
dbpass=lx
5、测试
测试类:
//演示MyBatis的使用
public class MyTest1{ //基本使用,新增数据 @Test public void test1() throws IOException{ //使用步骤 //1、使用流加载配置 InputStream iStream = Resources.getResourceAsStream(“SqlMapConfig.xml”); //2、创建工厂 SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(iStream); //3、创建会话对象 SqlSession session =factory.openSession(); //4、获取接口的实现类对象 StudentDao dao=session.getMapper(StudentDao.class); //5、调用接口中方法实现数据的操作 Student student=new Student(); student.setAge(20); student.setName(“李四”); dao.save(student); //6、提交 session.commit(); System.out.println(student.getId()); //7、关闭 session.close(); iStream.close(); } //修改和删除 @Test public void test2() throws IOException{ //加载配置 InputStream iStream=Resource.getResourceAsStream(“SqlMapConfig.xml”); //创建工厂 SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(iStream); //创建Session SqlSession session=factory.openSession(); //获取接口实现类 StudentDao dao=session.getMapper(StudentDao.class); //修改 Student stu1=new Student(); stu1.setAge(16); stu1.setName=(“西施”); stu1.setId(5); System.out.println(“修改:”+dao.update(stu1)); //删除 Student stu2=new Student(); stu2.setId(2); System,out.println(“删除”+dao.delete(stu2)); //提交 session.commit(); //关闭 session.close(); //释放 iStream.close(); } //查询 @Test public void test3() throws IOException{ //加载配置 InputStream iStream=Resources.getResourceAsStream(“SqlMapConfig.xml”); //创建工厂 SqlsessionFactory factory=new SqlSessionFactoryBuilder().build(iStream); //创建Session SqlSession session=factory.openSession(); //获取接口实现类 StudentDao dao==session.getMapper(StudentDao.class); System.out.println(dao.getClass().getName()); List<Student> list=dao.query(); for(Student s:list){ System.out.println(s.getId()); } } }
标签:使用步骤 names 技术 包名 rate 使用 isp auto date
原文地址:https://www.cnblogs.com/arrows/p/10368470.html