MyBatis是一个优秀的持久层框架。原生的jdbc操做存在大量的重复性代码(如注册驱动,建立链接,建立statement,结果集检测等)。框架的做用就是把这些繁琐的代码封装。java
MyBatis经过XML或者注解的方式将要执行的sql语句配置起来,并经过java对象和sql语句映射成最终执行的sql语句。最终由MyBatis框架执行sql,并将结果映射成java对象并返回。mysql
准备jar包sql
mysql数据库为firstdb,表名为xtb,表结构以下数据库
一共五个文件apache
package com.domain; public class User { private Integer user_id; private String user_name; private String user_sex; private String user_phone; public String toString() { return "User [user_id=" + user_id + ", user_name=" + user_name + ", user_sex=" + user_sex + ", user_phone=" + user_phone + "]"; } public String getUser_phone() { return user_phone; } public void setUser_phone(String user_phone) { this.user_phone = user_phone; } public String getUser_sex() { return user_sex; } public void setUser_sex(String user_sex) { this.user_sex = user_sex; } public String getUser_name() { return user_name; } public void setUser_name(String user_name) { this.user_name = user_name; } public Integer getUser_id() { return user_id; } public void setUser_id(Integer user_id) { this.user_id = user_id; } }
package com.Dao; import com.domain.*; public interface UserMapper { public User findUserById(int id) throws Exception; public void insertUser(User user) throws Exception; }
<?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"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/firstdb"/><!--用本身的数据库名字 --> <property name="username" value="root"/> <!-- 用本身的用户名密码 --> <property name="password" value=""/> </dataSource> </environment> </environments> <mappers> <mapper resource="UserMapper.xml"/> <!-- 这里配置映射文件 --> </mappers> </configuration>
<?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属性,否则会报错,可看作包名--> <mapper namespace="com.Dao.UserMapper"> <select id="findUserById" parameterType="int" resultType="com.domain.User"> select * from xtb where user_id = #{id} </select> <insert id="insertUser" parameterType="com.domain.User"> insert into xtb(user_name,user_sex,user_phone) values(#{user_name},#{user_sex},#{user_phone}) </insert> </mapper>
package com.test; import java.io.InputStream; 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 com.Dao.UserMapper; import com.domain.User; public class Test{ public static void main(String[] args) throws Exception { testInsertUser(); SelectByid(); } public static void SelectByid() throws Exception{ String resource = "SqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = factory.openSession(); //--------------- UserMapper userMapper = session.getMapper(UserMapper.class); User user = userMapper.findUserById(2); System.out.println(user); //-------------- session.close(); } public static void testInsertUser() throws Exception{ String resource = "SqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = factory.openSession(); //--------------------- User user = new User(); user.setUser_name("lalala"); user.setUser_sex("women"); user.setUser_phone("0123345"); UserMapper mapper = session.getMapper(UserMapper.class); mapper.insertUser(user); session.commit(); //---------------------- session.close(); } }
基本上都是UserMapper.xml和接口UserMap.java的对应关系没有配置好,我把UserMapper.xml和UserMap.java拼在一块儿能够看下本身的配置是否正确:session
简单来讲就是:接口的包名,类名,参数,返回值分别对应着映射文件的namespace,id,parameterType,resultType。mybatis
mybais运用了代理技术,实例化出接口UserMapper的实例,而后经过根据配置文件调用sql.app
具体流程:框架
1.读取配置文件SqlMapConfig.xml 获取连数据库的相关信息dom
2.有了这些信息就能建立SqlSessionFactory
3.SqlSessionFactory创建SqlSession
4.SqlSession 经过代理建立出UserMapper接口的实例,并从userMapper.xml中读取信息
5.经过userMapper.xml中的信息,执行sql语句
6.返回结果,关闭session