一、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());
}
运行结果: