JavaWeb笔记016 Mybatis基本使用

1.MyBatis单独使用的情况时的配置文件,最简单版本,正式开发一般不会单独使用,都是结合Spring使用

SqlMapConfig.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>
	<!-- 和spring整合后 environments配置将废除-->
	<environments default="development">
		<environment id="development">
		<!-- 使用jdbc事务管理-->
			<transactionManager type="JDBC" />
		<!-- 数据库连接池-->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="root" />
			</dataSource>
		</environment>
	</environments>
	<!--映射文件,xml的路径-->
    <mappers>
    	<mapper resource="User.xml"/>
    </mappers>
</configuration>
实体类
Public class User {
	private int id;
	private String username;// 用户姓名
	private String sex;// 性别
	private Date birthday;// 生日
	private String address;// 地址


get/set……
实体类对应的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">
    	<!-- 
	id:sql语句唯一标识
	parameterType:指定传入参数类型
	resultType:返回结果集类型
	#{}占位符:起到占位作用,如果传入的是基本类型(string,long,double,int,boolean,float等),那么#{}中的变量名称可以随意写.
	 -->
	<select id="findUserById" parameterType="java.lang.Integer" resultType="cn.pojo.User">
		select * from user where id=#{id}
	</select>
	
	<!-- 
	如果返回结果为集合,可以调用selectList方法,这个方法返回的结果就是一个集合,所以映射文件中应该配置成集合泛型的类型
	${}拼接符:字符串原样拼接,如果传入的参数是基本类型(string,long,double,int,boolean,float等),那么${}中的变量名称必须是value
	注意:拼接符有sql注入的风险,所以慎重使用
	 -->
	<select id="findUserByUserName" parameterType="java.lang.String" resultType="cn.pojo.User">
		select * from user where username like '%${value}%'
	</select>
	
	<!-- 
	#{}:如果传入的是pojo类型,那么#{}中的变量名称必须是pojo中对应的属性.属性.属性.....
	如果要返回数据库自增主键:可以使用select LAST_INSERT_ID()
	这里有坑,注意这里(记得这个坑是这样的,应该没记错)!!!!!!!!!!!!!SQL中直接引用的username等属性。假如在Dao中参数加了@Param注解,就必须使用指定的参数名引用属性,例如 int insertUser(@Param("user")User user);在SQL中就必须是#{user.username}而不能直接使用username
	 -->
	<insert id="insertUser" parameterType="cn.pojo.User" >
		<!-- 执行 select LAST_INSERT_ID()数据库函数,返回自增的主键
		keyProperty:将返回的主键放入传入参数的id中保存.
		order:当前函数相对于insert语句的执行顺序,在insert前执行是before,在insert后执行是AFTER
		resultType:id的类型,也就是keyproperties中属性的类型
		-->
		<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
			select LAST_INSERT_ID()
		</selectKey>
		insert into user (username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
	</insert>
	
	<!-- uuid方式作为主键
        <insert  id="insertUser" parameterType="cn.itcast.mybatis.po.User">
            <selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
                select uuid()
            </selectKey>
            insert into user(id,username,birthday,sex,address) 
            	 values(#{id},#{username},#{birthday},#{sex},#{address})
        </insert>
        注意这里使用的order是“BEFORE”
	-->
	
	<delete id="delUserById" parameterType="int">
		delete from user where id=#{id}
	</delete>
	
	<update id="updateUserById" parameterType="cn.pojo.User">
		update user set username=#{username} where id=#{id}
	</update>
</mapper>
Java代码使用
    public void testFindUserById() throws Exception{
    	String resource = "SqlMapConfig.xml";
    	//通过流将核心配置文件读取进来
    	InputStream inputStream = org.apache.ibatis.io.Resources.getResourceAsStream(resource);
    	//通过核心配置文件输入流来创建会话工厂
    	SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
    	//通过工厂创建会话
    	SqlSession openSession = factory.openSession();
    	//第一个参数:所调用的sql语句= namespace+.+sql的ID
    	User user = openSession.selectOne("test.findUserById", 1);
    	System.out.println(user);
    	openSession.close();
    }
    
    @Test
    public void testFindUserbyUserName() throws Exception{
    	String resource = "SqlMapConfig.xml";
    	InputStream inputStream = Resources.getResourceAsStream(resource);
    	SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
    	SqlSession openSession = factory.openSession();
    	
    	List<User> list = openSession.selectList("test.findUserByUserName", "王");
    	System.out.println(list);
    }
    
    @Test
    public void testInsertUser() throws Exception{
    	String resource = "SqlMapConfig.xml";
    	//通过流将核心配置文件读取进来
    	InputStream inputStream = Resources.getResourceAsStream(resource);
    	//通过核心配置文件输入流来创建会话工厂
    	SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
    	//通过工厂创建会话
    	SqlSession openSession = factory.openSession();
    	
    	User user = new User();
    	user.setUsername("赵四");
    	user.setBirthday(new Date());
    	user.setSex("1");
    	user.setAddress("北京昌平");
    	System.out.println("====" + user.getId());
    	
    	openSession.insert("test.insertUser", user);
    	//提交事务(mybatis会自动开启事务,但是它不知道何时提交,所以需要手动提交事务)
    	openSession.commit();
    	
    	System.out.println("====" + user.getId());
    }
    
    @Test
    public void testDelUserById()throws Exception{
    	String resource = "SqlMapConfig.xml";
    	//通过流将核心配置文件读取进来
    	InputStream inputStream = Resources.getResourceAsStream(resource);
    	//通过核心配置文件输入流来创建会话工厂
    	SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
    	//通过工厂创建会话
    	SqlSession openSession = factory.openSession();
    	
    	openSession.delete("test.delUserById", 29);
    	//提交
    	openSession.commit();
    }
    
    @Test
    public void testUpdateUserById() throws Exception{
    	String resource = "SqlMapConfig.xml";
    	//通过流将核心配置文件读取进来
    	InputStream inputStream = Resources.getResourceAsStream(resource);
    	//通过核心配置文件输入流来创建会话工厂
    	SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
    	//通过工厂创建会话
    	SqlSession openSession = factory.openSession();
    	
    	User user = new User();
    	user.setId(28);
    	user.setUsername("王麻子");
    	openSession.update("test.updateUserById", user);
    	
    	//提交
    	openSession.commit();
    }

插入数据库返回主键另一种实现

User user = new User();  
user.setUserName("chenzhou");  
user.setPassword("xxxx");  
user.setComment("测试插入数据返回主键功能");  
  
System.out.println("插入前主键为:"+user.getUserId());  
userDao.insertAndGetId(user);//插入操作  
System.out.println("插入后主键为:"+user.getUserId());


<insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chenzhou.mybatis.User">
    insert into user(userName,password,comment)
    values(#{userName},#{password},#{comment})
</insert>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值