非Spring環境下使用Mybatis操做數據庫的流程

準備工做

1,  導入mybatis-3.2.7.jar,mysql-connector-5.1.25-bin.jar兩個jar包java

2,  在數據庫中建立一個db_test數據庫,庫中有一個表爲user_t(id,user_name,password,age)mysql

3,  建立User.java實體包含屬性(id,username,password,age)sql

4,  建立jdbc.properties配置文件:內容以下(能夠不建立,直接在mybatis_config.xml中的properties中添加propertiy項),用於配置數據庫鏈接相關屬性數據庫

driverClassName=com.mysql.jdbc.Driversession

jdbc_url=jdbc:mysql://127.0.0.1:3306/db_test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNullmybatis

jdbc_username=rootapp

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>

 建立測試程序

方式一:ui

        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語句使用接口方式調用url

前面調用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;

相關文章
相關標籤/搜索