条件:使用maven管理项目(为了配置依赖项)
使用mybatis全流程:
1.建立数据库表,例如:建一张student 表
2.建立表对应的实体类
3.添加依赖项
4.创建dao层StudentDao接口,并添加crud
5.创建dao层StudentDao对应的mapper.xml文件,编写sql语句
6.在resources中编写mybatis配置文件:mybatis.xml
7.编写mybatis的工具类
8.在test文件中编写测试类
====================================================================
1. 建表student:
CREATE TABLE `student` ( `id` int(11) NOT NULL , `name` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;2. 编写实体类Student (略)
3. 添加依赖项 pom.xml
<dependencies> <dependency> <!-- 单元测试依赖 --> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!--mybatis依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.1</version> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.9</version> </dependency> </dependencies>4.创建dao层StudentDao接口,并添加crud
public Interface StudentDao{ //基本crud List<Student> selectAll(); int insertStudent(Student student); int updateStudent(Student student); int deleteStudent(Integer id); int updateStudentByName(@Parm(value="uname")String name,Integer id);//此处value=可以省略 }5.创建dao层StudentDao对应的mapper.xml文件,编写sql语句
<?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"> <!-- mybatis-3-mapper.dtd表示包含了本文件的限定条件 --> <mapper namespace="StudentDao对应的全限定名或者说相对路径"> <!--id与StudentDao接口中的方法名要一致 resultType 表示返回值类型,例如select:mybatis自动将select返回的每一条数据放入Student中并将其放进list集合中 # 表示占位符,{...}中间是传入的Student属性(也是数据库Student表的字段名) --> <select id="selectAll" resultType="Student的全限定名"> select id ,name,email,age from student </select> <insert id="insertStudent" resultType="Student的全限定名"> insert into student values(#{id},#{name},#{email},#{age}) </insert> <update id="updateStudent"> update student set name=#{name},email=#{email},age=#{age} where id=#{id} </update> <!-- parameterType 表示传入的参数类型,这是{这里可以是任意变量}--> <delete id="deleteStudent" parameterType="Integer"> delete from student where id=#{studentId} </delete> <!--uname是来自StudentDao中的方法参数@Parm(value)--> <update id="updateStudentByName"> update student set name=#{uname} where id=#{id} </update> </mapper>6.在resources中编写mybatis配置文件:mybatis.xml
<?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"> <!--mybatis-3-config.dtd包含本文件的限定条件--> <configuration> <!--配置Mybatis日志--> <settings> <setting name="logImpl" value="STDOUT_LOGGING" /> <settings> <!--environments 配置环境,一个环境表示一个数据库信息 default 默认使用的环境:数据库--> <environments default="mysql"> <!--id 是自定义环境名称,表示一个数据库的连接信息--> <environment id="mysql"> <!--type 指定事务类型,JDBC 表示使用JDBC的Connection对象--> <transactionManager type ="JDBC" ></transactionManager> <!--type 指定数据库连接信息,POOLED表示数据库连接池 这里相当于注册驱动,建立Connection连接, DriverManager.getConnection(url,username,password) 四个property顺序可互换 --> <dataSource type="POOLED"> <property name="url" value="jdbc:mysql://localhost:3306/ssm" /> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="username" value="root" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <!--指定mapper文件的位置--> <mappers> <!--dao层有几个mapper.xml文件,这里就要配置多少个mapper标签--> <mapper resource="mapper.xml的全限定名或者说mapper.xml的相对路径" /> </mappers> </configuration>7.编写mybatis的工具类
public class MybatisUtil{ private static SqlSessionFactory factory; static{ try{ InputStream in = Resources.getResourceAsStream("mybatis.xml"); SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); factory = builder.build(in); }catch(IOException e){ e.printStackTrace(); }finally{ in.close(); } } //获取SqlSession对象的方法 public static SqlSession getSqlSession(){ Sqlsession session = null; if(factory!=null){ //这里小括号可以添加true/false;true表示自动提交事务,false和无参表示手动提交事务 session = factory.openSession(); } return session; } }8.在test文件中编写测试类
public class MyTest{ @Test public void testSelectAll(){ SqlSession session = Mybatis.getSqlSession(); StudentDao dao = session.getMapper(StudentDao.class); List<Student> students = dao.selectAll(); students.forEach(student -> System.out.println(student)); } @Test public void testInsertStudent(){ SqlSession session = Mybatis.getSqlSession(); StudentDao dao = session.getMapper(StudentDao.class); Student student = new Student(1001,"李四","lisi@163.com",33); int i = dao.updateStudent(student); session.commit(); session.close(); System.out.println("insertStudent:"+i); } @Test public void testUpdateStudent(){ SqlSession session = Mybatis.getSqlSession(); StudentDao dao = session.getMapper(StudentDao.class); Student student = new Student(1001,"lisi","lisi@126.com",67); int i = dao.updateStudent(student); session.commit(); session.close(); System.out.println("updateStudent:"+i); } @Test public void testUpdateStudentByName(){ SqlSession session = Mybatis.getSqlSession(); StudentDao dao = session.getMapper(StudentDao.class); int i = dao.updateStudentByName("小明",1001); session.commit(); session.close(); System.out.println("updateStudentByName"+i); } @Test public void testDeleteStudent(){ SqlSession session = Mybatis.getSqlSession(); StudentDao dao = session.getMapper(StudentDao.class); int i = dao.deleteStudent(1001); session.commit(); session.close(); System.out.println("deleteStudent"+i); } }
