为了解决JDBC缺点:业务代码和sql语句混在一起----解耦合、用起来太麻烦---专注sql语句编写
MyBatis可以:1)注册驱动 2)创建JDBC中使用的Connection、Statement、ResultSet 3)执行sql语句 4)处理ResultSet,把记录集中的数据转为Java对象,把该对象放入List集合
使用MyBatis:
- 使用 Maven 来构建普通Java项目,则需将MyBatis依赖、mysql驱动的依赖、maven插件放到pom.xml 文件中
拷贝路径XML的插件 <build> <resources> <resource> <directory>src/main/java</ 所在的目录 ----> < 包括目录下的 .properties,.xml 文件都会扫描到 ----> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </plugins>
- 创建实体类(与表对应),属性名和数据库表的列名保持一致,生成属性对应的set、get方法
- 创建操作数据库的Dao接口,定义操作数据库的方法
- 创建接口:XxxDao
- 定义方法:定义操作----数据库表对应的对象(根据实体类创建的对象)的接口方法
- 在接口同目录下创建XML文件(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"> <!--.dtd约束文件:定义和显示当前文件可以使用的标签、属性等--> <mapper namespace="Dao接口的全名"> <!--mapper根标签,必须有值namespace命名空间:值推荐是Dao接口的全名,是参与识别sql语句的--> <!--写insert语句--> <insert> <!--写update语句--> <update> <!--写delete语句--> <delete> <!--写select语句--> <select> <!--执行SQL语句,把结果转成resultType对应的类型的对象(由框架通过反射机制创建resultType对应的类型的对象,把数据库中表的列赋值给与对象对象同名的属性)--> <select id="要执行的sql语句的唯一标识,推荐dao接口的方法名" parameterType="指定参数类型" resultType="告诉MyBatis执行语句后把数据赋值给哪个类型的Java对象(即步骤2的实体类),推荐用Java全类名"> <!--SQL语句, #{变量}是--执行sql语句是传入的实参--> select * from Blog where id = #{id} </select> <resultMap id="唯一值" type="执行SQL返回的Java类型全限定名称"> <!--自定义列名和属性名的对应--> <!--主键类型使用id标签--> <id column="表的列名" property="返回对象的属性值"/> <!--非主键类型使用result标签--> <result column="表的列名" property="返回对象的属性值"/> <!--属性名和列名一致不用定义--> </resultMap> <select id="" resultMap="resultMap标签的id"> select * from Blog where id = #{id} </select> </mapper>
- 创建MyBatis的主配置文件XML,只有一个,放到resources目录下:
- 获取数据库连接实例的数据源
- 指定其他mapper文件的位置
<?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> <!--设置日志功能--> <settings> ... <!--设置日志方式:SLF4J、LOG4J、LOG4J2、JDK_LOGGING、COMMONS_LOGGING、STDOUT_LOGGING、NO_LOGGING--> <setting name="logImpl" value="日志方式"/> ... </settings> <!--声明别名--> <typeAliases> <!--定义一个别名,方式一 type属性:Java全限定名称 alias属性:自定义别名--> <typeAlias type="全限定名" alias="别名"> <!--定义一个别名,方式二 (不区分大小写) 该包的下的类名就是别名--> <package name="包名" > </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <!--配置数据源:依赖创建连接对象Connection的--> <dataSource type="POOLED"> <!--driver:驱动类 相当于注册驱动--> <property name="driver" value="com.mysql.jdbc.Driver"/> <!--连接数据库的url--> <property name="url" value="