第十三周——MyBatis(一)

一、mysql数据库

今天发现一个查看mysql-front数据库中查看所有数据库的方法。之前,不管我建了多少数据库我再本地信息中都只能看到一个数据库,如果想要切换数据库的话,必须到登录信息中进行修改。

a. 点击“文件”-----》“登录信息”

b. 打开登录信息以后,点击“属性”,在弹出的新的窗口中,注意在数据库那一栏什么都不要填写。然后点击“确定”;这样,你最后出现的界面不再是特定的数据库,而是所有的数据库都呈现在左侧了!

 二、MyBatis入门

需要注意的是:我们接下来创建的项目是一个java项目,不是一个web项目;因此,在创建项目的时候,我们不要再点击"Dynamic Web project",而是"Java Project"。

成功效果图:

  • 导入jar包:

我感觉MyBatis导入jar包的过程还是与web项目略微有所不同的,web项目中jar包直接放在WEB-INF的lib目录下面就可以了,MyBatis(或者说是java项目)是需要通过Java Build Path来加入jar包。

1)在MyBatis下新建lib目录并将所用到的jar包放入lib文件夹内。

 2)右键项目名,选择最下方的properties。

 在外部资源中,选择你刚刚创建lib目录的地方,将你的jar包一个一个丢进来就好了。

3)添加jar包成功

  • 报错

经检查,是我的mabatis-config.xml文件出现了问题。第一个错误是:我在写的时候用户名和密码写错了;第二个错误是:我忘记了加上下面这个映射标签。

  • 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>
	<typeAliases>
		<package name = "com.how2java.pojo"/>
	</typeAliases>
	<environments default = "development">
		<environment id = "development">
			<transactionManager type = "JDBC"/>
			<dataSource type = "POOLED">
				<property name = "driver" value = "com.mysql.jdbc.Driver"></property>
				<property name = "url" value = "jdbc:mysql://localhost:3306/how2java"></property>
				<property name = "username" value = "root"></property>
				<property name = "password" value = "admin"></property>
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource = "com/how2java/pojo/Category.xml"/>
	</mappers>
</configuration>

<typeAliases></typeAliases>: 给实体类取别名的意思

下面的<package>标签是进行批量别名定义用的。扫描整个整个包下的类,别名为类名。

<package>中的name属性:指定要配置别名的包,指定后,该包下面的实体类都会注册别名,并且类名就是别名。

<mappers></mappers>:配置映射文件,这里是映射Category.xml。只有配置了mappers信息后,MyBatis才知道去哪里加载Mapper映射文件。

  • 运行成功

  •  练习Product查询

在向数据库中插入数据的时候,尤其是你插入的数据是中文的话,一定要注意将字符集设置为“utf-8",否则插入中文会一直报错。

 运行成功:

 Product.java

package com.how2java.pojo;

public class Product {
	private int id;
	private String name;
	private float price;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public float getPrice() {
		return price;
	}
	public void setPrice(float price) {
		this.price = price;
	}
}

Product.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.how2java.pojo">
	<select id = "listProduct" resultType = "Product">
		select * from product
	</select>
</mapper>

TestProduct.java

package com.how2java;

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.how2java.pojo.Category;
import com.how2java.pojo.Product;

public class TestProduct {
	public static void main(String[] args) throws Exception{
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession session = sqlSessionFactory.openSession();
		
		List<Product> pd = session.selectList("listProduct");
		for(Product p : pd){
			System.out.println(p.getName() + "    " + p.getPrice());
		}
	}
}

mybatis-config.xml

<mappers>
	<mapper resource = "com/how2java/pojo/Category.xml"/>
	<mapper resource = "com/how2java/pojo/Product.xml"/>
</mappers>

三、MyBatis CRUD

运行结果(出现了乱码):

观察数据库中的数据,发现数据库中存储进来的时候也存在乱码。

解决方法:

在连接数据库的时候指定字符编码集为UTF-8。

 成功解决:

 

  •  删
Category c = new Category();
c.setId(5);
session.delete("deleteCategory", c);

id为5的和id为6的都被我删掉了

  •  改
//因为函数的返回类型就是Category,因此可以用Category来接收
Category c = session.selectOne("getCategory", 4);
c.setName("修改了的Category名称");
//先取出想要修改的那一行,然后再进行修改
session.update("updateCategory", c);

  •  查询某一条记录
Category c = session.selectOne("getCategory", 2);
System.out.println(c.getName());

  •  获取全部记录
listAll(session);

private static void listAll(SqlSession session) {
    List<Category> cs = session.selectList("listCategory");
    for(Category ca : cs){
		System.out.println(ca.getName());
	}
}

 

四、模糊查询

MySql中的concat函数的作用:实现字符串拼接

concat(s1, s2, ......)返回结果为连接参数产生的字符串,或许有一个或多个参数。

若有任何一个参数为NULL,则返回值就为NULL。

Category.xml

<select id = "listCategoryByName" parameterType = "string" resultType = "Category">
	select * from Category where name like concat('%', #{0}, '%')
</select>

这里的一前一后两个%应该时通配符,代表的任意的0个或多个字符。

#{0}是MySql中的用法,代表“占位符”。

TestMyBatis.java

List<Category> cs = session.selectList("listCategoryByName", "cat");

for(Category c : cs){
	System.out.println(c.getName());
}

 从查询结果可以看出:查询关键字时是不区分大小写字母的。

 

五、多条件查询

Category.xml

<select id = "listCategoryByIdAndName" parameterType = "map" resultType = "Category">
	select * from category_ where id > #{id} and name like concat('%', #{name}, '%')
</select>
//因为是多个参数,而selectList方法又只接受一个参数对象,所以需要把多个参数放到Map里,
//然后把这个Map对象作为参数传递进去
Map<String, Object> params = new HashMap<>();
params.put("id", 2);
params.put("name", "cat");
		
List<Category> cs = session.selectList("listCategoryByIdAndName", params);
for(Category c : cs){
	System.out.println(c.getName());
}

运行结果: 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值