一.MyBatis
MyBatis是一个开源的数据持久层框架,其主要思想是将程序中的大量sql语句剥离出来,配置在配置文件中,实现SQL的灵活配置。并且可以在不修改程序代码的情况下
,直接在配置文件中修改SQL。
二.什么事ORM?
orm(object/Relation Mapping)对象/关系映射。是一种数据持久化技术,在对象模型和关系型数据库之间建立对应关系,通过javaBean对象去操作数据库表中的数据。
三.创建MyBatis核心配置文件configureation.xml
----案例配置
xml节点作用:https://www.geeksss.com/article-298-1.html
完整的configure配置
<?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> <!-- 设置mtbatis的一些运行参数:日志,是直接输出到控制台上还是输出到log4j文件中 --> <settings> <!-- name不可以随便写,只能叫这个名字;value有好几个选项这里选择向控制台输出 --> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <!--设置类型别名:在执行sql语句的时候,如果不设置别名。每次在指定的时候都需要包名+类名,写的长 --> <typeAliases> <!-- type就是完整实体类名, --> <tapeAlias type="entity.student" alias="User"/> </typeAliases> <!--数据库连接的属性,不同的开发阶段连接不同的数据库 开发阶段——开发环境:连接程序员自己的数据库 测试阶段——测试环境:连接测试数据库 上线运行——生产环境:连接正式数据库 里边可以写多个environment --> <environments default="dev"> <!-- 开发环境 --> <environment id="dev"> <!-- 通过JDBC管理事务 --> <transactionManager type="JDBC"/> <!--不使用连接池 --> <dataSource type="UNPOOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306:myschool"/> <property name="username" value="root"/> <property name="password" value="0217"/> </dataSource> </environment> </environments> <!--sql映射文件的路径--> <mappers> <!-- 引入要加载的sql文件 --> <mapper resource="studentDao.xml"/> </mappers> </configuration>
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"> <mapper namespace="dao.studentDao"> <!--resultMap--> <resultMap id="studentMap" type="entity.student"> <id property="stuId" column="stuId"></id> <result property="stuName" column="stuName"></result> </resultMap> <!--查询所有--> <select id="getAllStudent" resultMap="studentMap"> <!--resultMap对应 resultMap下的id值--> select * from student </select> <!--根据id值查询--> <select id="getStudentById" parameterType="int" resultType="stu"> select * from student where stuId = #{stuId} </select> </mapper>
四:编写工具类
public class MyBatis { private static final String RESOURCE = "mybatis-config.xml"; private static SqlSessionFactory sqlSessionFactory = null; private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>(); //关闭sqlsession public static void closeSession(){ SqlSession session = (SqlSession) threadLocal.get(); // 2 threadLocal.set(null); if (session !=null){ session.close(); } } public static SqlSession getSessionTwo(){ //读取配置文件 try { InputStream stream = Resources.getResourceAsStream(RESOURCE); sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream); return sqlSessionFactory.openSession(); } catch (IOException e) { e.printStackTrace(); } return null; } }
五:接口层
public interface studentDao { /** * 查询所有学生 * @return */ public List<student> getAllStudent(); /** * 根据id查学生 * @param * @return */ public student getStudentById(int id); /** * 添加学生 * @return */ public int addStudent(student stu); /** * 删除 学生根据id * @param id * @return */ public int deleStudent(int id); }
六: 测试类
@Test public void TestDele() throws IOException { //找到大配置 // String path = "mybatis-config.xml"; //读取配置文件 //InputStream is = Resources.getResourceAsStream(path); //拿到sqlsession工厂 //SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); //SqlSession session = sqlSessionFactory.openSession(); studentDao dao = MyBatis.getSessionTwo().getMapper(studentDao.class); int value = dao.deleStudent(1); ------修改 ??? 下面 System.out.print(value); }
另外 在删除和添加 的时候,如果 不进行sqlSession提交,所执行的结果是不会影响到数据库的,而且牵扯到Sqlsession的线程问题,
执行方法的sqlsession和执行提交的sqlsession必须一致
SqlSession sessionTwo = MyBatis.getSessionTwo(); studentDao dao =sessionTwo.getMapper(studentDao.class); int id = dao.deleStudent(1); System.out.print(id); sessionTwo.commit();