mybatis实现简单的增删查改
Posted 凌巴哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis实现简单的增删查改相关的知识,希望对你有一定的参考价值。
接触一个新技术,首先去了解它的一些基本概念,这项技术用在什么方面的。这样学习起来,方向性也会更强一些。我对于mybatis的理解是,
它是一个封装了JDBC的java框架。所能实现的功能是对数据库进行增删查改的功能。
首先,需要搭建一个demo,用于学习这个框架的使用方式。
(1)在IDE上建立自己的工程目录,一个普通的java工程项目就好,我电脑本地的IDE是Myeclipse。
(2)引入搭建框架需要的jar包,这个直接去网上搜索就好。
(3)框架的核心实现都是基于配置的,引入jar包后,先配置mybatis的核心xml文件,我自己命名为mybatis.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" /> <!-- 配置数据库连接信息 --> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> </configuration>
environments 和 environment这两个标签,里面的属性值,我直接按照官方提供的API定义,重点是dataSource标签下面的子标签,四个property分别用于指定数据库连接驱动,数据库连接地址,用户名、密码。这些信息统一使用properties文件配置。properties文件的信息如下
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/crm
username = root
password =root
(4)上面的配置是一些全局配置,下一步需要建立一个实体,映射mysql数据库中的某张表,我这里的表名叫A。建立的实体类叫User
public class User { private Integer id ; private String name ; private String age ; private String score ; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getScore() { return score; } public void setScore(String score) { this.score = score; } public String toString(){ return "id = " + id + " " +"name = " + name + " " +"age = " + age + " " +"score = " + score + " "; } }
建立好实体类后,再去配置实体类对应的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="com.test.IUserOperation"> <select id="getSingle" parameterType="int" resultType="com.domain.User"> select * from A where id = #{id} </select> <select id="ALL" parameterType="int" resultType="com.domain.User"> select * from A </select> <delete id="deleteOne" parameterType="com.domain.User"> delete from A where id = #{id} </delete> <select id="findByUserId" parameterType="int" resultType="com.domain.User"> select * from A where id = #{id} </select> <insert id="addUser" parameterType="com.domain.User" useGeneratedKeys="false" keyProperty="id"> insert into A values (#{id},#{name},#{age},#{score}) </insert> <update id="updateUser" parameterType="com.domain.User" > update A set name = #{name},age = #{age},score = #{score} where id = #{id} </update> <delete id="deleteUser" parameterType="int"> delete from A where id = #{id} </delete> </mapper>
这个配置里的namespace必须是唯一的,而且是你需要映射的实体类的绝对路径,我这边设计为基础接口的开发方式,所以映射到的是我的接口。接口里定义了相关的增添查改的方法,配置如下
interface IUserOperation{ User findByUserId(Integer id); void addUser(User u ); void updateUser(User u); void deleteUser(Integer id); }
接口中的方法名,对应xml文件里的select、update、insert、delete标签下的id名字,必须完全相同,否则会报错。在对应的标签下,编写你想要实现的sql语句。其中的#{id}、#{name}这些是用于接收参数的。编写完后,就可以写测试类去测试啦。
public class MyBatisTest { private static final String confPath = "mybatis.xml"; private static final String propertiesPath = "message.properties"; private static SqlSessionFactory ssf = null; private static SqlSession session = null; static{ InputStream in = MyBatisTest.class.getClassLoader().getResourceAsStream(confPath); Properties pro = new Properties(); try { pro.load(MyBatisTest.class.getClassLoader().getResourceAsStream(propertiesPath)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } ssf = new SqlSessionFactoryBuilder().build(in,pro); session = ssf.openSession(); } /** * 查询测试 */ public static void testSelect(){ IUserOperation iUser = session.getMapper(IUserOperation.class); User u = iUser.findByUserId(5); System.out.println(u.toString()); session.close(); } /** * 删除测试 */ public static void testDelete(){ IUserOperation iUser = session.getMapper(IUserOperation.class); iUser.deleteUser(14); session.commit(); session.close(); } /** * 修改数据 */ public static void testUpdate(){ IUserOperation iUser = session.getMapper(IUserOperation.class); User u = new User(); u.setId(3); u.setName("TEST_COME"); u.setAge("87"); u.setScore("100"); iUser.updateUser(u); session.commit(); session.close(); } /** * 数据添加 */ public static void testAdd(){ IUserOperation iUser = session.getMapper(IUserOperation.class); User u = new User(); u.setId(14); u.setAge("33"); u.setName("liberation"); u.setScore("**"); iUser.addUser(u); session.commit(); session.close(); } public static void main(String[] args) { //testAdd(); //testUpdate(); //testDelete(); testSelect(); } }
官方API上建议,把session设置为局部变量,我这里偷懒,设为全局变量。
以上是关于mybatis实现简单的增删查改的主要内容,如果未能解决你的问题,请参考以下文章