mybatis学习笔记之----初识mybatis
mybatis介绍:
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。MyBatis 最强大的特性之一就是它的动态语句功能。如果您以前有使用JDBC或者类似框架的经历,您就会明白把SQL语句条件连接在一起是多么的痛苦,要确保不能忘记空格或者不要在columns列后面省略一个逗号等。动态语句能够完全解决掉这些痛苦。尽管与动态SQL一起工作不是在开一个party,但是MyBatis确实能通过在任何映射SQL语句中使用强大的动态SQL来改进这些状况。动态SQL元素对于任何使用过JSTL或者类似于XML之类的文本处理器的人来说,都是非常熟悉的。在上一版本中,需要了解和学习非常多的元素,但在MyBatis 3 中有了许多的改进,现在只剩下差不多二分之一的元素。MyBatis使用了基于强大的OGNL表达式来消除了大部分元素。
环境搭建:
jar包:mybatis核心包,连接MYSQL数据包
开发工具:eclipse
基于XML的CRUD:
1.创建mybatis的主配置文件:
<?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> <typeAliases> <!-- 为User类取别名,以后在使用的时候2者是完全等价的 --> <typeAlias alias="User" type="com.carter.user.User" /> </typeAliases> <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://127.0.0.1:3306/demo02?useUnicode=true&characterEncoding=utf-8"/> <property name="username" value="root" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <!-- 注册mapper配置 --> <mappers> <mapper resource="com/carter/user/User.xml" /> </mappers> </configuration>
2.创建实体类
package com.carter.user; public class User { private int age; private String name; private float score; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getScore() { return score; } public void setScore(float score) { this.score = score; } }
3.创建工具类获取sqlsessionFactory
package com.carter.util; import java.io.IOException; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class SqlSessionUtil { private static SqlSessionFactory sqlSessionFactory = null; private static Reader reader = null; public static SqlSessionFactory getSqlSessionFactory(){ if(sqlSessionFactory==null){ try { reader = Resources.getResourceAsReader("config/Config.xml"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); //建造者模式得到SqlsessionFactory } return sqlSessionFactory; } }
4.创建操作接口
package com.carter.dao; import java.util.List; import com.carter.user.User; public interface IUser { //这里方法名应该与映射文件中ID一致 public List<User> getUserList(); public User getUserByID(int userid); public int insertStu(User user); public int deleteUser(int id); public int updateUser(User user); }
5.创建映射文件
<?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="com.carter.dao.IUser">
<resultMap type="User" id="resultUserList">
<!-- 这里可以解决和数据库字段不统一问题,column是数据字段, property为实体字段 是一种映射 以后均可以使用该映射-->
<id column="age" property="id"></id>
<result column="name" property="name"/>
<result column="score" property="score"/>
</resultMap>
<!-- 这里返回结果集应该用resultMap,且值应该为上面声明的ID-->
<select id="getUserList" resultMap="resultUserList">
select * from `user`
</select>
<select id="getUserByID" parameterType="int" resultType="User"><!--这里User由于别名原因,与User实体类完全等价-->
select * from `user`
where user.id=#{userid}
</select>
<insert id="insertStu" parameterType="User">
insert into user(name,score)values(#{name},#{score})
</insert>
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id}
</delete>
<update id="updateUser" parameterType="User">
update user set name=#{name},score=#{score} where id=#{age}
</update>
</mapper>
6.创建测试代码
package com.carter.test; import java.util.List; import javax.naming.spi.DirStateFactory.Result; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.junit.Test; import com.carter.dao.IUser; import com.carter.user.User; import com.carter.util.SqlSessionUtil; public class Client { @Test public void insertIntoUser(){ SqlSessionFactory sqlSessionFactory = SqlSessionUtil.getSqlSessionFactory(); SqlSession sqlSession = sqlSessionFactory.openSession(); User user = new User(); user.setName("李花花"); user.setScore(100); IUser iUser = sqlSession.getMapper(IUser.class); int result = (int) iUser.insertStu(user); if(result>0){ System.out.println("新增成功"); }else{ System.out.println("新增失败"); } } @Test public void getAllUser(){ SqlSessionFactory sessionFactory = SqlSessionUtil.getSqlSessionFactory(); SqlSession sqlSession = sessionFactory.openSession(); IUser iUser = sqlSession.getMapper(IUser.class); List<User> list = iUser.getUserList(); for(User u:list){ System.out.println("用户名:"+u.getName()+"========="+"成绩:"+u.getScore()); } } @Test public void deleteUser(){ SqlSessionFactory sessionFactory = SqlSessionUtil.getSqlSessionFactory(); SqlSession sqlSession = sessionFactory.openSession(); IUser iUser = sqlSession.getMapper(IUser.class); int result = iUser.deleteUser(4); if(result>0){ System.out.println("删除成功"); }else{ System.out.println("删除失败"); } } @Test public void updateUser(){ SqlSessionFactory sessionFactory = SqlSessionUtil.getSqlSessionFactory(); SqlSession sqlSession = sessionFactory.openSession(); IUser iUser = sqlSession.getMapper(IUser.class); User user = new User(); user.setAge(9); user.setName("张强a"); user.setScore(12); int result = iUser.updateUser(user); } @Test public void getUserByID(){ SqlSessionFactory sessionFactory = SqlSessionUtil.getSqlSessionFactory(); SqlSession sqlSession = sessionFactory.openSession(); IUser iUser = sqlSession.getMapper(IUser.class); User user = iUser.getUserByID(1); System.out.println("id为1的用户是"+user.getName()); } }
基于注解的CRUD:
基于注解的实现方式和基于XML最大的区别在于我们不需要为每个实体类提供一个映射文件,而是在实体类操作的接口上添加注解,并在主配置文件中注册该类。所有的操作SQL都写在注解上。
操作接口:
package com.carter.dao; import java.util.List; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import com.carter.user.User; public interface IUser { //这里方法名应该与映射文件中ID一致 @Select("select * from user ") public List<User> getUserList(); @Select("select * from `user` where user.id=#{userid}") public User getUserByID(int userid); @Insert("insert into user(name,score)values(#{name},#{score}) ") public int insertStu(User user); @Delete("delete from user where id=#{id}") public int deleteUser(int id); @Update("update user set name=#{name},score=#{score} where id=#{age}") public int updateUser(User user); }

浙公网安备 33010602011771号