MyBatis-Insert、Delete、Update的注意事項


MyBatis-Insert、Delete、Update的注意事項

插入/更新亂碼的解決

出現插入亂碼,首先要考慮數據庫的編碼集是不是UTF-8

如果數據庫的編碼無誤,查看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>
    <!--配置SQL打印-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    
    <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://rayfoo.cn:3306/test?useUnicode=true&amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="****"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="cn/rayfoo/mapper/CustomerMapper.xml"/>
    </mappers>
</configuration>

插入后數據庫不生效的解決

插入不生效考慮SqlSession是否提交。下面我們會展示正確的代碼。此方法同樣適用刪除和更新。

package cn.rayfoo.bean;

import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * Created by rayfoo@qq.com Luna on 2020/2/4 15:29
 */
@Data@NoArgsConstructor
public class Customer {
    private Integer cust_id;
    private String cust_name;
    private String cust_profession;
    private String cust_phone;
    private String email;

    public Customer(String cust_name, String cust_profession, String cust_phone, String email) {
        this.cust_name = cust_name;
        this.cust_profession = cust_profession;
        this.cust_phone = cust_phone;
        this.email = email;
    }
}

 

package cn.rayfoo.util;

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 java.io.IOException;
import java.io.InputStream;

/**
 * Created by rayfoo@qq.com Luna on 2020/2/5 10:56
 */
public class MyBatisUtil {

    /**
     * 獲取一個Session
     * @return
     * @throws IOException
     */
    public static SqlSession getSession() throws IOException {
        InputStream is = Resources.getResourceAsStream("mybatis-cfg.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        return sqlSessionFactory.openSession();
    }

}
package cn.rayfoo.mapper;

import cn.rayfoo.bean.Customer;

import java.util.List;

/**
 * Created by rayfoo@qq.com Luna on 2020/2/4 15:45
 */
public interface CustomerMapper {

    /**
     * 查詢所有記錄
     *
     * @return
     */
    List<Customer> findAll();

    Customer findOne(Integer cust_id);

    int insertCustomer(Customer customer);

}
<?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="cn.rayfoo.mapper.CustomerMapper">
    <insert id="insertCustomer" parameterType="cn.rayfoo.bean.Customer">
        insert into customer(cust_id,cust_name,cust_profession,cust_phone,email)
        values(#{cust_id},#{cust_name},#{cust_profession},#{cust_phone},#{email});
    </insert>
    <select id="findAll" resultType="cn.rayfoo.bean.Customer">
        select * from customer
    </select>
    <select id="findOne" resultType="cn.rayfoo.bean.Customer">
        select * from customer where cust_id = #{cust_id}
    </select>
</mapper>
package cn.rayfoo.test;

import cn.rayfoo.bean.Customer;
import cn.rayfoo.mapper.CustomerMapper;
import cn.rayfoo.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;

import org.junit.Test;

import java.io.IOException;


/**
* Created by rayfoo@qq.com Luna on 2020/2/4 15:58
*/
public class TestApp {

@Test
public void test01() throws IOException {
SqlSession session = MyBatisUtil.getSession();
CustomerMapper mapper = session.getMapper(CustomerMapper.class);
Customer all = mapper.findOne(1);
System.out.println(all);
session.close();
}

@Test
public void test02() throws IOException {
SqlSession session = MyBatisUtil.getSession();
Customer customer = new Customer( "張三", "碼農", "10086", "10086@qq.com");
int insert = session.insert("insertCustomer",customer);
//此處需要進行提交
session.commit();
session.close();
}

@Test
public void test03() throws IOException {
SqlSession session = MyBatisUtil.getSession();
CustomerMapper mapper = session.getMapper(CustomerMapper.class);
Customer customer = new Customer( "張三", "碼農", "10086", "10086@qq.com");
mapper.insertCustomer(customer);
//此處需要進行提交
session.commit();
session.close();
}

}

 

插入POJO對象的注意事項

為了防止SQL注入,我們盡量使用#{},在插入POJO對象的屬性時,#{}中使用POJO對象的屬性名!!!

參考上述代碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM