前不久学完java基础,给自己安排的下一阶段的学习内容是框架Mybatis。说实话,还没开始学习Mybatis时,我的心里已经有点恐惧了,一是觉得自己java基础掌握的不够扎实,二是像Mybatis这样的框架还有很多,到底何时才能学到头。还是学学试试看吧
Mybatis简介:Mybatis在JDBC的基础上进行了封装,能够简化操控数据库的代码量。同时把java语句与sql语句分离开来,可以使开发者专注于业务逻辑的实现。下面我们来说一下怎么照葫芦画瓢实现通过Mybatis查询数据库中的数据表。
pom.xml:首先新建一个maven项目,在pom.xml文件组中导入所需的jar包。有mybatis包、Mysql数据库连接包、日志包log4j、单元测试junit。
<packaging>jar</packaging> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.19</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>
主配置文件SqlConfig.xml:我们想用java程序控制sql语句对数据库进行操作,同时又想把sql语句独立出来,也要能够连接数据库的配置信息。解决思路是在一个文件中放入数据库配置信息,同时该文件又能搜索到书写sql语句的文件。可以看到该文件起到连接其它文件的作用,把该文件称为主配置文件。
<environments default="mysql"> <environment id="mysql"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!--配置映射文件的位置--> <mappers> <!--<mapper resource="com/itheima/dao/IUserDao.xml"></mapper>--> <package name="com.itheima.dao"/> </mappers>
User类:该类的成员变量与数据表的列名一一对应,是用来封装数据表的。
代理类IUserDao:为了在对数据库进行操作的方法不写sql语句,我们使用代理类来执行对数据库的操作。代理类就是一个接口类,其中有一些未实现的对数据库进行操作的方法。
public interface IUserDao { List<User> findAll(); /** * 保存方法 * @param user */ void saveUser(User user); /** * 更新用户 * @param user */ void updateUser(User user);
sql脚本配置文件IUserDao.xml:在该文件中写sql语句。测试类在调用IUserDao接口中的方法时,要能够实现对数据库的操作,所以这要求(1)能够识别对应的sql配置文件(2)并且找到需要的sql语句。sql配置文件名与IUserDao接口名一致可实现(1),sql配置文件中键id可实现sql语句与方法的对应。一般还需用键指明sql执行的结果封装到哪个对象,传入sql的数据类型。
<!--查询所有--> <select id="findAll" resultType="user"> select * from user </select> <!--保存用户--> <insert id="saveUser" parameterType="com.itheima.domain.User"> insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday}); </insert>
测试类MybatisTest:
`public class MybatisTest {
public static void main(String[] args)throws Exception { //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(); }
}`