Mybatis根据id查询用户
首先要建立pojo实体类对象,User里有name,age,gender
配置log4j.properties(DEBUG为调试,ERROR和Info为生产环境)
# Global logging configuration
#ERROR\DEBUG
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
配置SqlMapConfig.xml
该部分在和Spring整合后就不需要了
<?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="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/datasheet?serverTimezone=UTC" />
<property name="username" value="root" />
<property name="password" value="123123" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="User.xml" />
</mappers>
</configuration>
配置User.xml
映射的两个sql查询方法
#{}是占位符号,如果接收简单类型,里面可以写成value或其他
${}是拼接符号,如果接收简单类型,只能写value名称,会引起sql注入,不建议使用
<?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="test">
<!-- 精准查询 -->
<select id="findUserByAge" parameterType="int" resultType="com.cc.mybatis.pojo.User">
SELECT * FROM user WHERE age=#{age}
</select>
<!-- 模糊查询 -->
<select id="findUserByName" parameterType="int" resultType="com.cc.mybatis.pojo.User">
SELECT * FROM user WHERE name LIKE '%${value}%'
</select>
<!-- 插入用户 -->
<insert id="insertUser" parameterType="com.cc.mybatis.pojo.User">
INSERT INTO user(name,age,gender) VALUE(#{name},#{age},#{gender})
<!-- 返回非自增ID,sql语句中要加入id属性。
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
SELECT uuid()
</selectKey> -->
<!-- 返回自增ID,不用加入id属性
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID
</selectKey> -->
</insert>
<!-- 更新 -->
<update id="update" parameterType="com.cc.mybatis.pojo.User">
UPDATE user SET name=#{name},age=#{age},gender=#{gender} WHERE age=#{age}
</update>
</mapper>
配置JdbcTest类
package com.cc.mybatis.jdbc;
import java.io.InputStream;
import java.util.List;
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 com.cc.mybatis.pojo.User;
//最简易的查询程序
public class JdbcTest {
public static void main(String[] args) throws Exception {
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 创建会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 通过工厂的到session
SqlSession sqlSession = sqlSessionFactory.openSession();
// 通过session操作数据库(区别在User.xml)
// 精准查询
User user = sqlSession.selectOne("test.findUserByAge", 18);
System.out.println(user);
// 模糊查询
List<User> list = sqlSession.selectList("test.findUserByName", "佳");
// System.out.println(list);
for (User u : list) {
System.out.println(u);
}
// 插入用户
User user2 = new User();
user2.setName("嘻嘻");
user2.setAge(18);
user2.setGender("q");
sqlSession.insert("test.insertUser", user2);
sqlSession.commit();
// 更新
user2.setGender("qqq");
sqlSession.update("test.update", user2);
sqlSession.commit();
// 释放资源
sqlSession.close();
}
}
GitHub:MybatisDemo
https://github.com/Jia-99/Mybatis/tree/master/MybatisDemo
Mapper代理方法开发
开发规范
- mapper.xml的namespace要写mapper接口的地址
- mapper.java接口定义方法要有以下规范
- 方法名与xml中的statement的id一致
- 方法参数与parameterType一致
- 方法返回类型与resultType一致
部分代码
User.xml代码与上面一致
UserMapper接口定义方法
package com.cc.mybatis.jdbc;
import com.cc.mybatis.pojo.User;
public interface UserMapper {
public User findUserByAge(int age);
}
同样需要得到配置流
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 创建会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
Mapper代理查询
// 通过工厂的到session
SqlSession sqlSession = sqlSessionFactory.openSession();
//创建UserMapper对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//调用UserMapper方法
User user = userMapper.findUserByAge(18);
System.out.println(user);
mapper注解:Day0529-Mybatis
https://github.com/Jia-99/Mybatis/tree/master/Day0529-Mybatis