1.基础认知
框架:软件开发的一套解决方案,不同的框架解决的是不同的问题,框架封装了很多细节,使开发者可以使用极简的方式实现功能,大大提高开发效率
三层架构:
表现层:展示数据(Servlet,jsp)
业务层:处理业务需求(Service,Javabean)
持久层:数据库交互(DAO)
持久层总图
2、持久层技术解决方案
JDBC技术:
Connection
PreparedStatement
ResultSet
Spr ing的JdbcTemplate:
Spring中对jdbc的简单封装
Apache的DBUtils:
它和Spring的JdbcTemplate很像,也是对Jdbc的简单封装
以上这些都不是框架
JDBC是规范
Spring的Jdbc Template和Apache的DBUtils都只是工具类
3、mybatis的概述
mybatis是一个持 久层框架,用java编写的。
它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动,创建连接等繁杂过程
它使用了ORM思想实现了结果集的封装。
ORM:
0bject Relational Mappging 对象关系映射
简单的说:
就是把数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表。就是需要做到实体类中的属性和数据库表的字段名称保持一致。
4.MyBatis环境搭建,IDEA创建普通Maven项目
pom.xml配置mybatis,mysql,log4j,junit
1 <dependency> 2 <groupId>org.mybatis</groupId> 3 <artifactId>mybatis</artifactId> 4 <version>3.5.0</version> 5 </dependency> 6 7 <dependency> 8 <groupId>mysql</groupId> 9 <artifactId>mysql-connector-java</artifactId> 10 <version>5.1.37</version> 11 </dependency> 12 13 14 <dependency> 15 <groupId>log4j</groupId> 16 <artifactId>log4j</artifactId> 17 <version>1.2.17</version> 18 </dependency> 19 20 <dependency> 21 <groupId>junit</groupId> 22 <artifactId>junit</artifactId> 23 <version>4.12</version> 24 <scope>test</scope> 25 </dependency>
5、mybatis的入门
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <!--mybatis的主配置文件--> 6 <configuration> 7 <!--配置环境--> 8 <environments default="mysql"> 9 <!--配置mysql环境--> 10 <environment id="mysql"> 11 <!--配置事务类型--> 12 <transactionManager type="JDBC"></transactionManager> 13 <!--配置数据源(连接池)--> 14 <dataSource type="POOLED"> 15 <!--配置连接数据库的4个基本信息--> 16 <property name="driver" value="com.mysql.jdbc.Driver"/> 17 <property name="url" value="jdbc:mysql://localhost:3305/mybatis"/> 18 <property name="username" value="root"/> 19 <property name="password" value="123456"/> 20 </dataSource> 21 </environment> 22 </environments> 23 <!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件--> 24 <mappers> 25 <mapper resource="com/leaf/dao/IUserDao.xml"></mapper> 26 </mappers> 27 </configuration>
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <mapper namespace="com.leaf.dao.IUserDao"> 6 <!--此处配置dao接口所要实现的SQL语句--> 7 <!--配置查询所有--> 8 <select id="findAll" resultType="com.leaf.domain.User"> 9 select * from user 10 </select> 11 </mapper>
1 # Set root category priority to INFO and its only appender to CONSOLE. 2 #log4j.rootCategory=INFO, CONSOLE debug info warn error fatal 3 log4j.rootCategory=debug, CONSOLE, LOGFILE 4 5 # Set the enterprise logger category to FATAL and its only appender to CONSOLE. 6 log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE 7 8 # CONSOLE is set to be a ConsoleAppender using a PatternLayout. 9 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 10 log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 11 log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n 12 13 # LOGFILE is set to be a File appender using a PatternLayout. 14 log4j.appender.LOGFILE=org.apache.log4j.FileAppender 15 log4j.appender.LOGFILE.File=d:\axis.log 16 log4j.appender.LOGFILE.Append=true 17 log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout 18 log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
mybatis的环境搭建
第一步:创建maven工程并导入坐标
第二步:创建实体类和dao的接口
第三步:创建Mybatis的主配置文件
SqlMapConifg. xml
第四步:创建映射配置文件
IUserDao. xml .
环境搭建的注意事项:
第一个:创建IUserDao. xml和IUserDao. java时名称是为了和我们之前的知识保持一致。
在Mybatis中它把持久层的操作接口名称和映射文件也叫做: Mapper
所以: IUserDao 和IUserMapper是一 样的
第二个:在idea中创建目录的时候,它和包是不- -样的
包在创建时: com. itheima. dao它是三级结构
目录在创建时: com. itheima. dao是一级目录
第三个: mybatis的映射配置文件位置必须和dao接口的包结构相同
第四个:映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
第五个:映射配置文件的操作配置(select) ,id属性的取值必须是dao接口的方法名
当我们遵从了第三,四,五点之后,我们在开发中就无须再写dao的实现类。
入门程序:写一个测试类
import com.leaf.dao.IUserDao; import com.leaf.domain.User; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; import java.util.List; public class MybatisTest { public static void main(String[] args) throws IOException { //1.读取配置文件 InputStream in = Resources.getResourceAsStream ("SqlMapConfig.xml"); //2. 创建SqlSessionFactory SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder (); SqlSessionFactory factory = builder.build(in); //3.使用工厂生产SqlSession对象 SqlSession session = factory.openSession (); //4.使用SqlSession创建Dao接口的代理对象 IUserDao userDao = session.getMapper (IUserDao.class); //5.使用代理对象执行分法 List<User> users = userDao.findAll (); for (User user:users) { System.out.println (user); } //6.释放资源 session.close (); in.close (); } }
运行测试