先说说mybatis是什么。
mybatis:apache的一个开源项目,持久层的一个开发组件,加快开发速度;
ps:解释下什么是持久层,百度百科的上说将数据存放于不易丢失的器件上,粗糙的理解就是数据库的存储和读取。
所以,mybatis实际上负责数据库的链接、数据的增删改查。
以下是项目的目录结构:
红色的问号是丢失引用的jar包,不要在意这些细节
以下是使用JDBC进行mysql配置一个简单的例子。
import java.sql.*; public class heihei { public static void main(String[] args) throws Exception { // 加载驱动 String driver = "com.mysql.jdbc.Driver"; // 数据库的网络地址,127.0.0.1是本地IP,3306是端口号,可以在mysql配置文件中修改 String url = "jdbc:mysql://127.0.0.1:3306/test"; // 加载类 Class.forName(driver); // 数据库的账户和密码 Connection connecter = DriverManager.getConnection(url, "root", "root"); if (!connecter.isClosed()) System.out.println("success in getConnetion"); Statement statement = connecter.createStatement(); // 最简单的sql语句 ResultSet rs = statement.executeQuery("select * from heiheihei"); String No = null; while (rs.next()) { // 打印结果 No = rs.getString("id"); System.out.println(No); } } }
相比之后的mybatis代码,会发现以上的代码似乎"简洁"很多。
不过在开发过程中,这并不是我们想要的,因为:
1.实际开发关心的只是sql语句和查询结果的使用;
2.实际开发会有很多的参数,使用java传参方法并不方便。
mybatis比较好地解决了上诉两个问题,通过配置文件来实现数据库的连接和sql语句的修改。
以下是用到的一些jar包,可以到对应的网站去下载。
其中mysql-connector-java.jar是mysql驱动,可以到mysql官网下载;
mybatis.jar是mybatis使用的jar包;
log4j.jar是记录日志用的第三方插件。
下面将一一介绍mybatis的配置文件:
1.Configuration.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"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"> <property name="" value=""/> </transactionManager> <dataSource type="UNPOOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1:3306/test?useSSL=false"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers> <mapper resource="sqlxml/User.xml"/> </mappers> </configuration>
重点关注中间的几项配置,这其实就是连接mysql数据的各种配置。
useSSL=false是解决控制报warning的一项配置,没有的话,也没关系。
<mappers> <mapper resource="sqlxml/User.xml"/> </mappers>
是加载其他xml文件,该文件就是存放sql语句的文件。
以下是具体的sql语句文件,文件名是User.xml,也就是上面配置文件引用的。
<?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="User"> <select id="test" resultType="entity.Name"> select * from heiheihei </select> </mapper>
namespace+id组成了该sql语句的唯一标识,将由java代码调用;
resultType为返回类型,entity.Name是包名加类型,需要写全。
resultType和resultMap的区别,等弄明白单独聊,网上看了很多博客,感觉说的不太清楚。
以下是entity.Name实体类,用于存储mysql查询出来的数据,变量名称需要跟查询出来的结果对应,即列名或者重命名的名称。
package entity; public class Name { private int id; private String name; private int year; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } }
配置、sql语句、返回实体类都有了,下面就是如何使用这些文件了。
package db; import java.io.IOException; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class DBAccess { public SqlSession getSqlSession() throws IOException{ Reader reader = Resources.getResourceAsReader("config/Configuration.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); SqlSession sqlSession = sqlSessionFactory.openSession(); return sqlSession; } }
以下是业务层具体的执行代码
package dao; import java.io.IOException; import java.util.List; import org.apache.ibatis.session.SqlSession; import db.DBAccess; import entity.Name; public class QueryDB { public static void main(String[] args) { //获取数据库链接 DBAccess dBAccess = new DBAccess(); SqlSession sqlSession = null; try { //使用mybatis获得sqlSession sqlSession = dBAccess.getSqlSession(); //调用User.xml文件的test方法 List<Name> result = sqlSession.selectList("User.test"); //打印查询结果 for (Name name : result) { System.out.println(name.getId()); } } catch (IOException e) { e.printStackTrace(); } finally { sqlSession.close(); } } }
配置完成之后,会发现,sql语句已经和数据库的配置文件完全分离了,也就达到了开头第一个目标,至于如何优化传参,将在后面一篇讲解mybatis参数的文章中阐述。