非Spring环境下使用Mybatis操作数据库的流程
准备工作
1, 导入mybatis-3.2.7.jar,mysql-connector-5.1.25-bin.jar两个jar包
2, 在数据库中创建一个db_test数据库,库中有一个表为user_t(id,user_name,password,age)
3, 创建User.java实体包含属性(id,username,password,age)
4, 创建jdbc.properties配置文件:内容如下(可以不创建,直接在mybatis_config.xml中的properties中添加propertiy项),用于配置数据库连接相关属性
driverClassName=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://127.0.0.1:3306/db_test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
jdbc_username=root
jdbc_password=
编写代码
创建UserMapper.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.liangjidong.mapper.UserMapper"> <select id="selectById" parameterType="int" resultType="User"> select id, user_name as username, password, age from user_t where id=#{id} </select> </mapper>
创建mybatis-config.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> <properties resource="jdbc.properties"></properties> <!-- 创建User类的别名 --> <typeAliases> <typeAlias type="com.liangjidong.pojo.User" alias="User" /> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"> </transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driverClassName}" /> <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/liangjidong/mapper/UserMapper.xml" /> </mappers> </configuration>
创建测试程序
方式一:
String resource = "mybatis-config.xml"; Reader reader = Resources.getResourceAsReader(resource); SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(reader); SqlSession session = factory.openSession(); User user = session.selectOne( "com.liangjidong.mapper.UserMapper.selectById", 1); System.out.println(user);
方式二: 对xml文件中的sql语句使用接口方式调用
前面调用sql语句的方式为
session.selectOne("com.liangjidong.mapper.UserMapper.selectById", 1);这种方式容易发生的字符串文字和转换的错误。通过使用接口的方式来调用既方便有不易出现错误
首先定义接口UserMapper.java
package com.liangjidong.mapper; import com.liangjidong.pojo.User; public interface UserMapper { public User selectById(int id); }
请注意,这里面有一个方法名 selectById必须与 User.xml 里面配置的 select 的id 对应(<select id=" selectById ")
这种方式,要注意的一个地方就是。在UserMapper.xml 的配置文件中,mapper namespace=" com.liangjidong.mapper.UserMapper " ,命名空间非常重要,不能有错,必须与我们定义的package 和接口一致。
测试代码如下:
UserMapper userMapper = session.getMapper(UserMapper.class);
User user = userMapper.selectById(1);
对数据库的增,删,该和前面类似
注意:在update时,遇到整形时,且对象中没有添加该数据,则默认会以0为结果更新到数据库中,解决办法:在判断的时候加上and age!=''"
<if test="age!=null and age!=''">
age=#{age},
</if>
但是调用结束后要提交事务(不然数据是不会更新到数据库中的)
session.commit();
总结:mybatis中调用增,删,改,查接口应该返回的数据分别是:
insert,返回值是:新插入行的主键(primary key);需要包含<selectKey>语句,才会返回主键,否则返回值为null。
update/delete,返回值是:更新或删除的行数;无需指明resultClass;但如果有约束异常而删除失败,只能去捕捉异常。
queryForObject,返回的是:一个实例对象或null;需要包含<select>语句,并且指明resultMap;
queryForList,返回的是:实例对象的列表;需要包含<select>语句,并且指明resultMap;