任务一 基于mybatis框架的学生管理程序在mydb数据库下,现有一个学生表tb_student(学生编号、学生姓名、学生年龄、所属宿舍)和一个食堂卡表tb_card(食堂卡编号、卡号、余额),其中,学生表tb_student和食堂卡表tb_card是一对一关系。学生编号id (主键)学生姓名 name学生年龄age食堂卡编号card_id(外键)1张三1822李四193 表1 学生表tb_student食堂卡编号id (主键)卡号 num余额balance1sy2001402sy20022003sy2003104sy20040表2 食堂卡表tb_card使用MyBatis编程实现下列要求:查询李四的年龄。查询所有的食堂卡信息。新增学生记录,姓名和年龄为自己真实信息,卡号为1。给1号食堂卡充值200元。删除卡内余额少于5的食堂卡。查询张三食堂卡余额。
时间: 2024-02-22 16:54:52 浏览: 101
这里提供一个基于MyBatis框架的Java代码示例,实现上述要求:
首先,需要定义两个Java类:Student和Card,对应两个数据表tb_student和tb_card。
Student.java:
```java
public class Student {
private int id; // 学生编号
private String name; // 学生姓名
private int age; // 学生年龄
private Card card; // 所属食堂卡
// 省略getter和setter方法
}
```
Card.java:
```java
public class Card {
private int id; // 食堂卡编号
private String num; // 卡号
private double balance; // 余额
// 省略getter和setter方法
}
```
接下来,需要编写MyBatis的Mapper接口和SQL映射文件,实现对学生和食堂卡数据的增删改查操作。
StudentMapper.xml:
```xml
<mapper namespace="com.example.mapper.StudentMapper">
<resultMap id="StudentResultMap" type="com.example.model.Student">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<association property="card" column="card_id" select="com.example.mapper.CardMapper.getCardById"/>
</resultMap>
<select id="getAgeByName" parameterType="String" resultType="int">
select age from tb_student where name = #{name}
</select>
<select id="getAllCards" resultType="com.example.model.Card">
select * from tb_card
</select>
<insert id="addStudent" parameterType="com.example.model.Student">
insert into tb_student (name, age, card_id) values (#{name}, #{age}, #{card.id})
</insert>
<update id="rechargeCard" parameterType="com.example.model.Card">
update tb_card set balance = balance + #{balance} where id = #{id}
</update>
<delete id="deleteCardsWithLowBalance">
delete from tb_card where balance < 5
</delete>
<select id="getBalanceByStudentName" parameterType="String" resultType="double">
select balance from tb_card where id = (select card_id from tb_student where name = #{name})
</select>
</mapper>
```
CardMapper.xml:
```xml
<mapper namespace="com.example.mapper.CardMapper">
<select id="getCardById" parameterType="int" resultType="com.example.model.Card">
select * from tb_card where id = #{id}
</select>
</mapper>
```
最后,需要编写测试代码,测试上述功能是否正确实现。
```java
public class MyBatisTest {
public static void main(String[] args) throws IOException {
// 1. 加载MyBatis配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 2. 获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 3. 获取Mapper接口对象
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
CardMapper cardMapper = sqlSession.getMapper(CardMapper.class);
// 4. 查询李四的年龄
int age = studentMapper.getAgeByName("李四");
System.out.println("李四的年龄为:" + age);
// 5. 查询所有食堂卡信息
List<Card> cardList = cardMapper.getAllCards();
for (Card card : cardList) {
System.out.println(card);
}
// 6. 新增学生记录,姓名和年龄为自己真实信息,卡号为1
Student student = new Student();
student.setName("XXX");
student.setAge(18);
Card card = new Card();
card.setId(1);
student.setCard(card);
studentMapper.addStudent(student);
sqlSession.commit();
// 7. 给1号食堂卡充值200元
Card card1 = new Card();
card1.setId(1);
card1.setBalance(200);
cardMapper.rechargeCard(card1);
sqlSession.commit();
// 8. 删除卡内余额少于5的食堂卡
cardMapper.deleteCardsWithLowBalance();
sqlSession.commit();
// 9. 查询张三食堂卡余额
double balance = studentMapper.getBalanceByStudentName("张三");
System.out.println("张三的食堂卡余额为:" + balance);
// 10. 关闭SqlSession
sqlSession.close();
}
}
```
这里的mybatis-config.xml配置文件中需要包含两个Mapper文件的路径,如下所示:
```xml
<configuration>
<typeAliases>
<package name="com.example.model"/>
</typeAliases>
<mappers>
<mapper resource="com/example/mapper/StudentMapper.xml"/>
<mapper resource="com/example/mapper/CardMapper.xml"/>
</mappers>
</configuration>
```
以上就是一个基于MyBatis框架的学生管理程序的代码实现,希望对您有所帮助。
阅读全文