软工实训-- 学习回顾1
学习回顾
mysql 使用
1.sql 文的使用(增、删、改、查询)
创建数据库 mybatis
a1. 表的创建 保存的表名 userinfo
userid |
int |
11 |
|
|
选中 |
username |
char |
20 |
|
|
|
pwd |
char |
20 |
|
|
|
导出的sql 文
CREATE TABLE `userinfo` (
`userid` int(11) NOT NULL auto_increment,
`username` char(20) default NULL,
`pwd` char(20) default NULL,
PRIMARY KEY (`userid`) )
a2.查询
Select * from userinfo where username = ‘张三’
2.JDBC 的使用 (回顾)
3.Mybatis 配置及使用 (重点)
下载一个jdk1.7(推荐使用) 或者 1.6 1.8
配置环境变量 把如下地址
C:\Program Files\Java\jdk1.7.0_79\bin 32位系统
C:\Program Files (X86)\Java\jdk1.7.0_79\bin
检查java 版本
Win+R 输入 cmd
再输入 java -version
部分代码:
DROP TABLE IF EXISTS `userinfo`;
CREATE TABLE `userinfo` (
`userid` int(11) NOT NULL auto_increment,
`username` char(20) default NULL,
`pwd` char(20) default NULL,
PRIMARY KEY (`userid`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of userinfo
-- ----------------------------
INSERT INTO `userinfo` VALUES ('1', '张三', '123');
INSERT INTO `userinfo` VALUES ('2', '里斯', 'qwe');
INSERT INTO `userinfo` VALUES ('3', '王五', 'asd');
Userinfo.Java:
<?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">
<!-- namespace:命名空间 在使用的时候,需要适用到它 -->
<mapper namespace="dry">
<!-- 替代语句 -->
<sql id="cols">
userid,username,pwd
</sql>
<!-- 查询所有信息 -->
<!--
resultType: 返回类型,适用 Userinfo 实体类作为接受返回的类型
<include refid="cols"/> 可以在sql文中引用 已经定义过的sql片段
-->
<select id="listAll" resultType="cn.neusoft.mybatis.pojo.Userinfo">
select <include refid="cols"/> from userinfo
</select>
<!-- 查询单个用户 根据id 进行查询 -->
<!--
parameterType:输入参数类型
#{userid} 需要和实体类对应
-->
<select id="getById" parameterType="integer" resultType="aliasesUser">
select <include refid="cols"/> from userinfo
where userid=#{userid}
</select>
<!-- 用户插入 -->
<!-- cn.neusoft.mybatis.pojo.Userinfo 这个实体类 我们在 sqlMapConfig.xml
里面给它定义 了别名 aliasesUser
因此 aliasesUser 替代了Userinfo 这个实体类
-->
<insert id="addUser" parameterType="aliasesUser">
insert into userinfo(userid,username,pwd) values (#{userid},#{username},#{pwd})
</insert>
<!-- 更新一个用户信息 根据用户名修改用户密码-->
<update id="updateOne" parameterType="aliasesUser">
update userinfo set pwd=#{pwd} where username=#{username}
</update>
<!-- 删除用户 -->
<delete id="deleteOne" parameterType="aliasesUser">
delete from userinfo where username=#{username}
</delete>
</mapper>
UserinfoDao.Java
package cn.neusoft.mybatis.dao;
import java.util.List;
import cn.neusoft.mybatis.pojo.Userinfo;
public interface UserinfoDao {
//插入用户信息操作 Userinfo 实体类可以携带用户信息
public boolean addUser(Userinfo userinfo);
//根据用户姓名 修改 用户密码
public boolean updateUser(Userinfo userinfo);
//根据用户姓名 删除 用户信息
public boolean deleteUser(String username);
//查询所有用户信息
public List<Userinfo> findAll();
//根据用户名查询 个人信息(必做)由于实际情况 ,1个用户只会对应1个用户,因此只能查到一条记录
//所以 ,可以不使用list 而直接使用Userinfo 作为方法类型
public Userinfo findByUsername(String username);// 用list的方法:public List<Userinfo> findByUname(String username);
//选做 实现如下分页查询方法
//select * from userinfo limit pageSize(pageNo-1),pageSize;
public List<Userinfo> findByPage(int pageSize,int pageNo);
}
UserinfoDaoImpl.Java
package cn.neusoft.mybatis.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.transform.Result;
import cn.neusoft.mybatis.jdbc.Dbutils;
import cn.neusoft.mybatis.pojo.Userinfo;
public class UserinfoDaoImpl implements UserinfoDao {
@Override
public boolean addUser(Userinfo userinfo) {
// 读取Userinfo 实体类的信息,然后把信息插入到数据库
//1.编写sql语句
String sql = "insert into userinfo (username,pwd)values (?,?)";
//2.如果sql语句中有问号,我们需要对应信息
//obj 对象中 userinfo.getUsername()在本方法中对应第一个问号
// useinfo.getPwd()在本方法中对应第二个问号
Object[] obj = new Object[]{ userinfo.getUsername(),
userinfo.getPwd() };
//3.把sql语句 以及 obj 对象 放入 Dbutils 的executeUpdate方法中进行执行
//注意,Dbutils 的executeUpdate方法类型是int类型的,只能使用int类型接收
int a =Dbutils.executeUpdate(sql, obj);
if(0!=a){//如果insert 操作能执行,那么a 的值就不会是0,那么我们认为操作成功,返回true
return true;
}
return false;
}
@Override
public boolean updateUser(Userinfo userinfo) {
// TODO Auto-generated method stub
String sql ="update userinfo set pwd='"+userinfo.getPwd()+
"' where username ='"+userinfo.getUsername()+"'";
System.out.println(sql);
//由于以上sql文我们没有写"?" 所以 不用使用Object[]对象做填充
int a =Dbutils.executeUpdate(sql, null);
if(0!=a){
return true;
}
return false;
}
@Override
public boolean deleteUser(String username) {
// TODO Auto-generated method stub
String sql ="delete from userinfo where username=?";
Object[] obj = new Object[]{username};
int a =Dbutils.executeUpdate(sql, obj);
if(0!=a){
return true;
}
return false;
}
//查询所有用户信息 最终返回一个list 集合
@Override
public List<Userinfo> findAll() {
// TODO Auto-generated method stub
List<Userinfo> list = new ArrayList<Userinfo>();
String sql="select * from userinfo ";
//把sql文 查询结果 返回给ResultSet对象
ResultSet rs =Dbutils.executeQuery(sql, null);
try {
while(rs.next()){
//由于查询所有信息, 意味着Userinfo需要重复修改使用,那么就会在循环体中多次使用
//Useinfo
Userinfo userinfo =new Userinfo();
//把rs对象中查询到的每一组信息放入到Userinfo实体类中
userinfo.setUserid(rs.getInt("userid"));
userinfo.setUsername(rs.getString("username"));
userinfo.setPwd(rs.getString("pwd"));
list.add(userinfo);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
@Override//根据用户名查询个人信息
public Userinfo findByUsername(String username) {
// TODO Auto-generated method stub
String sql="select * from userinfo where username = ?";
/* Object[] obj = new Object[]{username};
* username 是String 类型的话 ,做sql拼接的时候会自动加上""
* 如果表中是数字类型, 可能导致"" 不识别
* 这个时候 ,一种情况可以适用Integer Long转换一下数字
* 或者sql文进行拼接 进行解决
* sql拼接示例:updateUser(Userinfo userinfo) 方法中
* */
Object[] obj = new Object[]{username};
//把sql文 查询结果 返回给ResultSet对象
ResultSet rs =Dbutils.executeQuery(sql, obj);
Userinfo userinfo =new Userinfo();
try {
while(rs.next()){
//由于查询所有信息, 意味着Userinfo需要重复修改使用,那么就会在循环体中多次使用
//把rs对象中查询到的每一组信息放入到Userinfo实体类中
userinfo.setUserid(rs.getInt("userid"));
userinfo.setUsername(rs.getString("username"));
userinfo.setPwd(rs.getString("pwd"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return userinfo;
}
@Override
public List<Userinfo> findByPage(int pageSize, int pageNo) {
// TODO Auto-generated method stub
List<Userinfo> list = new ArrayList<Userinfo>();
//select * from userinfo limit pageSize*(pageNo-1),pageSize;
//select * from userinfo limit ?*(?-1),? 这句可以通过以下方式实现
int i =pageSize*(pageNo-1);
String sql="select * from userinfo limit ?,? ";
Object[] obj =new Object[]{i,pageSize};
//把sql文 查询结果 返回给ResultSet对象
ResultSet rs =Dbutils.executeQuery(sql, obj);
try {
while(rs.next()){
//由于查询所有信息, 意味着Userinfo需要重复修改使用,那么就会在循环体中多次使用
//Useinfo
Userinfo userinfo =new Userinfo();
//把rs对象中查询到的每一组信息放入到Userinfo实体类中
userinfo.setUserid(rs.getInt("userid"));
userinfo.setUsername(rs.getString("username"));
userinfo.setPwd(rs.getString("pwd"));
list.add(userinfo);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
}
待续。。。。。。